使用HttpClient发送空内容

时间:2016-01-10 00:09:18

标签: java apache-httpclient-4.x

我正在尝试连接到另一家公司的API。 来自doc的文章::

  

即使你的GET请求,你也需要包含Java等价物        curl_setopt($ch, CURLOPT_POSTFIELDS, $content),您可以将$data设置为相等        到一个空数组。

他们示例中的

$content是一个空的JSON数组。

我正在使用org.apache.commons.httpclient

我不确定如何将帖子字段添加到org.apache.commons.httpclient.methods.GetMethod或者甚至是否可能。

我尝试使用Content-Length为2但GET超时(可能正在寻找我没有提供的内容。如果我删除了内容长度,我从api服务器得到无效的响应)

   HttpClient client = new HttpClient();
   GetMethod method = new GetMethod("https://api.xxx.com/account/");
   method.addRequestHeader("Content-Type", "application/json");
   method.addRequestHeader("X-Public-Key", APKey);
   method.addRequestHeader("X-Signed-Request-Hash", "xxx");
   method.addRequestHeader("Content-Length", "2");

   int statusCode = client.executeMethod(method);

2 个答案:

答案 0 :(得分:0)

我不认为GetMethod包含任何附加请求正文的方法,因为GET请求不应该包含正文。 (但实际上也没有身体禁止 - 请参阅:HTTP GET with request body。)

您正在尝试使用不同语言和不同客户端库编写的文档,因此您必须稍微使用试验和错误。听起来他们期望没有身体的请求,你已经拥有了。没有充分的理由说明为什么他们需要" Content-Length"使用GET,但如果是这种情况,请尝试将其设置为0.

答案 1 :(得分:0)

这就是我解决这个问题的方法

创建此类

public class HttpGetWithEntity extends HttpEntityEnclosingRequestBase {
    public HttpGetWithEntity() {
        super();
    }
    public HttpGetWithEntity(URI uri) {
        super();
        setURI(uri);
    }
    public HttpGetWithEntity(String uri) {
        super();
        setURI(URI.create(uri));
    }
    @Override
    public String getMethod() {
        return HttpGet.METHOD_NAME;
    }
}

然后调用函数看起来像

public JSONObject get(JSONObject payload, String URL) throws Exception {

    JSONArray jsonArray = new JSONArray();
    CloseableHttpClient client = HttpClientBuilder.create().build();

    HttpGetWithEntity myGet = new HttpGetWithEntity(WeeblyAPIHost+URL);
    myGet.setEntity( new StringEntity("[]") );
    myGet.setHeader("Content-Type", "application/json");
    myGet.setHeader("X-Public-Key", APIKey);
    HttpResponse response = client.execute(myGet);

    JSONParser parser = new JSONParser();
    Object obj = parser.parse( EntityUtils.toString(response.getEntity(), "UTF-8") ) ;
    JSONObject jsonResponse = (JSONObject) obj;

    return jsonResponse;

}