【问题标题】:Java Post request with form data带有表单数据的 Java Post 请求
【发布时间】:2018-01-23 01:28:48
【问题描述】:

我想用 Java 进行一个简单的 POST 调用,
我收到 200 响应代码,但是响应消息错误,
我被告知在使用 表单数据 时进行 Post 调用有不同的方法。

以下是我当前用于进行 post 调用的 Java 代码 -

private String makePostCall(){
        try {
            String url = "http://someIp/trusted";
            HttpClient client = new DefaultHttpClient();
            HttpPost post = new HttpPost(url);

            // add header
            List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
            urlParameters.add(new BasicNameValuePair("username", "app_user"));

            post.setEntity(new UrlEncodedFormEntity(urlParameters));

            HttpResponse response = client.execute(post);
            System.out.println("\nSending 'POST' request to URL : " + url);
            System.out.println("Post parameters : " + post.getEntity());
            System.out.println("Response Code : " + response.getStatusLine().getStatusCode());

            BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
            StringBuffer result = new StringBuffer();
            String line = "";
            while ((line = rd.readLine()) != null) {
                result.append(line);
            }

            System.out.println(result.toString());
            return result.toString();

        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

以下是通过 Postman 应用运行的 Post call 示例 -

我指的是以下网站-
https://www.mkyong.com/java/how-to-send-http-request-getpost-in-java/


post call 的预期结果应该是一个 Token 即。一个字符串值,当前响应为-1。

【问题讨论】:

  • 有什么问题?给出预期与实际结果
  • post call 的预期结果应该是一个 Token 即。一个字符串值,当前响应为-1。
  • response的状态码是什么?
  • 我收到 200 响应,但我被告知我正在传递表单数据,即。 app_user 方法不对之类的,请查看 Postman 截图。

标签: java post postman


【解决方案1】:

尝试通过显式设置内容类型multipart/form-data

post.setHeader("Content-Type", "multipart/form-data");

在你的代码中,

post.setEntity(new UrlEncodedFormEntity(urlParameters)); 
post.setHeader("Content-Type", "multipart/form-data");

【讨论】:

    【解决方案2】:

    这些答案是正确的,但我很难将其转化为工作代码。所以,让我提供一个可以重复使用的通用且有效的答案。

    private static RequestConfig requestConfig = RequestConfig.custom().build();
    
    public HttpResponse postWithFormData(String url, List<NameValuePair> params) throws IOException {
            // building http client
            HttpClient httpClient = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).build();
            HttpPost request = new HttpPost(url);
    
            // adding the form data
            request.setEntity(new UrlEncodedFormEntity(params));
            return httpClient.execute(request);
        }
    
    List<NameValuePair> urlParameters = new ArrayList<>();
    
    // add any number of form data
    urlParameters.add(new BasicNameValuePair("form_key_1", "form_value_1");
    urlParameters.add(new BasicNameValuePair("form_key_2", "form_value_2");
    
    // Getting the HTTP Response and processing it
    HttpResponse response = postWithFormData("http_url", urlParameters);
    HttpEntity entity = response.getEntity();
    // String of the response
    String responseString = EntityUtils.toString(entity);
    // JSON of the response (use this only if the response is a JSON)
    JSONObject responseObject = new JSONObject(responseString);
    

    这些是我的主要导入,以防有人对导入什么感到困惑。

    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.util.EntityUtils;
    import org.json.JSONObject;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    

    【讨论】:

    • 你的requestConfig 是什么? 3号线
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    • 2013-02-26
    相关资源
    最近更新 更多