我们将Unirest 1.5.4用于java。我们的服务器对DELETE调用的响应是204-NO_CONTENT状态和一个空的响应体。当我执行同步删除调用时,以下调用将以SocketTimeoutException结束。
为了进行更深入的调查,我交换了服务器中的一些行,以响应状态200和"{}"正文。只有使用此服务器端破解Unirest才能正常工作。
这是我的(失败的)Unirest客户端代码:
public static void main(String... args) throws UnirestException {
String baseUrl = "http://localhost:9010/orga/";
String orgaJson = "{}";
HttpResponse<String> postResponse = Unirest.post(baseUrl).body(orgaJson).asString();
System.out.println("POST status = " + postResponse.getStatus());
JSONObject orga = new JSONObject(postResponse.getBody());
String orgaId = orga.getJSONObject("_id").getString("$oid");
HttpResponse<String> deleteResponse = Unirest.delete(baseUrl+"{id}").routeParam("id", orgaId).asString();
System.out.println("DELETE status = " + deleteResponse.getStatus());
System.out.println("DELETE body = " + deleteResponse.getBody());
// the next call will cause a SocketTimeoutException
Unirest.post(baseUrl).body(orgaJson).asString();
}
我通过设置略高于默认值的超时来解决类似的问题。看起来,如果您尝试与MailChimp这样的服务建立多个连接,那么每个后续请求都会花费更多的时间。试着尝试一下。
Unirest.setTimeouts(10000, 30000);