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、パラメータ名が一致していることを確認した.書き方を変えてパラメータを得ることができるからだ.
コード:

       /**
     *     ,  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);//            
             
          
          } 
        } 
      } 
    } 
  }