in src/main/java/com/alibaba/cloudapi/sdk/client/ApacheHttpClient.java [189:257]
private HttpUriRequest buildRequest(ApiRequest apiRequest) {
if(apiRequest.getHttpConnectionMode() == HttpConnectionModel.SINGER_CONNECTION){
apiRequest.setHost(host);
apiRequest.setScheme(scheme);
}
ApiRequestMaker.make(apiRequest , appKey , appSecret);
RequestBuilder builder = RequestBuilder.create(apiRequest.getMethod().getValue());
/*
* 拼接URL
* HTTP + HOST + PATH(With pathparameter) + Query Parameter
*/
try {
URIBuilder uriBuilder = new URIBuilder();
uriBuilder.setScheme(apiRequest.getScheme().name());
uriBuilder.setHost(apiRequest.getHost());
uriBuilder.setPath(apiRequest.getPath());
if (!HttpCommonUtil.isEmpty(apiRequest.getQuerys())) {
for (Map.Entry<String, List<String>> entry : apiRequest.getQuerys().entrySet()) {
for(String value : entry.getValue()){
uriBuilder.addParameter(entry.getKey(), value);
}
}
}
builder.setUri(uriBuilder.build());
} catch (URISyntaxException e) {
throw new SdkException("build http request uri failed", e);
}
EntityBuilder bodyBuilder = EntityBuilder.create();
//设置请求数据类型
if(null == apiRequest.getFirstHeaderValue(HttpConstant.CLOUDAPI_HTTP_HEADER_CONTENT_TYPE)) {
bodyBuilder.setContentType(ContentType.parse(apiRequest.getMethod().getRequestContentType()));
}
else{
bodyBuilder.setContentType(ContentType.parse(apiRequest.getFirstHeaderValue(HttpConstant.CLOUDAPI_HTTP_HEADER_CONTENT_TYPE)));
}
if (!HttpCommonUtil.isEmpty(apiRequest.getFormParams())) {
/*
* 如果formParams不为空
* 将Form中的内容以urlQueryParams的格式存放在body中(k1=v1&k2=v2&k3=v3)
*/
List<NameValuePair> paramList = new ArrayList<NameValuePair>();
for (Entry<String, List<String>> entry : apiRequest.getFormParams().entrySet()) {
for(String value : entry.getValue()) {
paramList.add(new BasicNameValuePair(entry.getKey(), value));
}
}
bodyBuilder.setParameters(paramList);
builder.setEntity(bodyBuilder.build());
} else if (!HttpCommonUtil.isEmpty(apiRequest.getBody())) {
bodyBuilder.setBinary(apiRequest.getBody());
builder.setEntity(bodyBuilder.build());
}
for (Map.Entry<String, List<String>> entry : apiRequest.getHeaders().entrySet()) {
for(String value : entry.getValue()){
builder.addHeader(entry.getKey(), value);
}
}
return builder.build();
}