httpclientリクエストを使用してMultipartEntityBuilder構成パラメータを使用した場合、リモート・サーバはパラメータを取得できません.
5769 ワード
詳細
httpclientリクエストを使用すると、リモートサーバはパラメータを取得できません.
1、パッケージバージョン:httpclient-4.5.3.jar,httpcore-4.4.6.jar,httpmime-4.5.3.jar
2、ローカル同一サーバーはhttpclient呼び出しによって伝達されたパラメータを取得することができる(
**通過**)
3、ローカルの異なるサーバはhttpclient呼び出しによって伝達されたパラメータを取得することができる(
**通過**)
4、リモートサーバはhttpclient呼び出しで伝達されたパラメータを取得できない(
**は**を通過しません)
5、パラメータ名が一致していることを確認した.書き方を変えてパラメータを得ることができるからだ.
コード:
ソリューション(
すべての環境で使用できるわけではありません):
httpclientリクエストを使用すると、リモートサーバはパラメータを取得できません.
1、パッケージバージョン:httpclient-4.5.3.jar,httpcore-4.4.6.jar,httpmime-4.5.3.jar
2、ローカル同一サーバーはhttpclient呼び出しによって伝達されたパラメータを取得することができる(
**通過**)
3、ローカルの異なるサーバはhttpclient呼び出しによって伝達されたパラメータを取得することができる(
**通過**)
4、リモートサーバはhttpclient呼び出しで伝達されたパラメータを取得できない(
**は**を通過しません)
5、パラメータ名が一致していることを確認した.書き方を変えてパラメータを得ることができるからだ.
コード:
/**
* , JSONObject
*
* @param url
* @param headerParams
* @param requestParams
*
* @return
*/
public static JSONObject httpPostToJson(String url,JSONObject headerParams,JSONObject requestParams) {
HttpPost httpPost = null;
JSONObject jsonObject = new JSONObject();
try {
// HttpClient
HttpClient httpClient = HttpClients.createDefault();
// httpPost ,
httpPost = createHttpPost(url,headerParams);
// httpPost
setHttpRequestParams(httpPost, requestParams);
// httpPost
jsonObject = executeHttpClient(httpClient, httpPost);
} catch (Exception e) {
e.printStackTrace();
jsonObject.put("code", ERROR_STATUS_CODE);
jsonObject.put("msg", " , ");
jsonObject.put("data", "{}");
}finally{
if(httpPost != null){
httpPost.abort();
}
}
/**
* httpPost ,
*
* @param _url
* @param headerParams
* @return
*/
private static HttpPost createHttpPost(String _url, JSONObject headerParams)throws Exception{
// Post
HttpPost httpPost = new HttpPost(_url);
//
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(CONNECT_TIME_OUT).setConnectionRequestTimeout(CONNECTION_REQUEST_TIME_OUT)
.setSocketTimeout(SOCKET_TIME_OUT).build();
httpPost.setConfig(requestConfig);
//
//
if(headerParams != null){
for(Object key : headerParams.keySet()){
httpPost.setHeader(key.toString(), headerParams.getString(key.toString()));
}
}
return httpPost;
}
/**
*
*
* @param httpPost
* @param jsonObj
* @param in
*/
private static void setHttpRequestParams(HttpPost httpPost,JSONObject jsonObj)throws Exception{
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builderHttpRequestParams(httpPost, builder, jsonObj);
}
/**
*
*
* @param httpPost
* @param jsonObj
* @param in
*/
private static void builderHttpRequestParams(HttpPost httpPost,MultipartEntityBuilder builder,JSONObject jsonObj)throws Exception{
if(jsonObj != null){
for(Object key : jsonObj.keySet()){
builder.addTextBody(key.toString(), jsonObj.getString(key.toString()));
}
}
HttpEntity entity = builder.build();
httpPost.setEntity(entity);
}
ソリューション(
すべての環境で使用できるわけではありません):
public void processUpload(HttpServletRequest request, HttpServletResponse response){
//
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if(isMultipart){
DiskFileItemFactory factory = new DiskFileItemFactory();
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
List items = null;
try {
// request
items = upload.parseRequest(request);
} catch (FileUploadException e) {
e.printStackTrace();
}
if(items!=null){
//
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = iter.next();
//
if (item.isFormField()) {
// input name
String name = item.getFieldName();
//input value
String value = item.getString();
System.out.println(" :" + name + " :" + value);
}
//
else {
//
String fieldName = item.getFieldName();
//
String fileName = item.getName();
fileName = fileName.substring(fileName.lastIndexOf("/") + 1);//
}
}
}
}
}