我正在尝试连接到另一家公司的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);
答案 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;
}