我尝试在Springboot应用程序中使用HTTPClient向URL发送JSON POST请求,但我从服务器收到400状态响应。然而,当我使用Postman发送相同的请求时,我从服务器收到所需的响应。
下面是我的代码:
// some dummy url:
String url = "http://88.22.199.111:5000/detect";
JSONObject json1 = new JSONObject();
json1.put("From", "Sawan");
json1.put("to", "Mohan");
json1.put("message", "is API working?");
json1.put("check_list", 1);
HttpClient httpClient = HttpClient.newBuilder().build();
HttpRequest httpRequest = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(json1.toString()))
.build();
System.out.println(json1.toString());
HttpResponse<String> httpResponse = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString());
System.out.println(httpResponse.statusCode());
System.out.println(httpResponse.body());
这是控制台上的输出:
{"check_list":1,"From":"Sawan","to":"Mohan","message":"is API working?"}
400
{"message": "The browser (or proxy) sent a request that this server could not understand."}
当我通过Postman点击相同的URL并输入以下详细信息时,我会从服务器获得所需的响应:
申请类型:POST
URL:与上面的URL相同
网址:
curl --location 'http://88.22.199.111:5000/detect' \
--header 'Content-Type: application/json' \
--data '{
"From":"Sawan"
,"to":"Mohan"
,"message":"is API working?"
,"check_list":1
} '
预期输出:
{
"status": 200,
"message": "Success",
"timestamp": "2023-03-31 05:20:33.455868 +0000",
"data": {
"Message": "is API working?",
"MessageTimeUTC": "Fri, 31 Mar 2023 05:20:33 GMT",
"Message_By": "sawan",
"Message_To": "mohan",
"Message_Intended_For": "mohan",
"Sentences": []
}
另外,当我使用RestTemplate类时,它工作得很好,我在控制台上获得了所需的输出,但在实际应用程序中,我不能使用springboot的RestTemplate类,所以我需要帮助。
我的代码有什么问题吗?我需要在我的请求中包括任何额外的头吗?任何帮助都将不胜感激。
1条答案
按热度按时间osh3o9ms1#
希望这能让你更近一步。我没有进入你服务器的权限。
我已经比较了java .NET.http.HttpClient发送的内容和Postman/cURL发送的内容。我能看到的唯一区别是
Accept
,Upgrade
和Http2-Settings
头,我已经将它们添加到下面的代码中。User-Agent
头并不重要。这应该不会有什么不同,但也许你正在调用的服务器非常特殊,例如它不能做http 2。对于这类问题,我发现在httpbin.org上发出请求非常有用。
也许还可以尝试
RestTemplate
来比较工作的头部和有效负载与失败的头部和有效负载。