gpt4 book ai didi

java - 无法使用 Java 中的 HTTP 客户端将 JSON 发布到服务器

转载 作者:搜寻专家 更新时间:2023-10-31 20:13:23 24 4
gpt4 key购买 nike

我正在尝试将 JSON 对象发送到自定义端口上的服务器。但是,我从来没有从服务器得到任何响应。我认为错误可能出在字符串实体中,但我无法弄清楚它是什么。

我已经查看了这些其他问题:

HTTP POST using JSON in Java

post json to java server

How to build a http post request with the correct entity with Java and not using any library?

How to POST data in Android to server in JSON format?

他们都没有解决我的问题。我正在尝试“在 Java 中使用 JSON 的 HTTP POST”中的解决方案(16 票),但它不起作用。

这是我的代码:

public void reset() {
DefaultHttpClient httpClient = new DefaultHttpClient();
try {
System.out.println("Start");
jsonURL = "http://x.x.x.x:3994";
HttpPost request = new HttpPost(jsonURL);
StringEntity params = new StringEntity("{\"id\":1,\"method\":\"object.deleteAll\",\"params\":[\"subscriber\"]}");
request.addHeader("Content-Type", "application/json");
request.setEntity(params);
HttpResponse response = httpClient.execute(request);
System.out.println("End");
} catch (Exception ex) {
ex.printStackTrace();
} finally {
httpClient.getConnectionManager().shutdown();
}
}

控制台在开始时打印“Start”,但我从未从“End”获得任何输出,也从未从异常中获得任何堆栈跟踪。调试时,调试器会在“httpClient.execute(request)”行停止并且永远不会继续。

当我从我的终端运行这个命令时:

echo '{"id":1, "method":"object.deleteAll", "params":["subscriber"]} ' | nc x.x.x.x 3994

一切都正确执行,我的请求已被服务器接收。

我认为我的问题可能出在 StringEntity 上,但我不确定。

编辑:

使用 Wireshark 我能够捕获发送到服务器的这个数据包:

POST / HTTP/1.1 Content-Type: application/json Content-Length: 60
Host: x.x.x.x:3994 Connection: Keep-Alive User-Agent:
Apache-HttpClient/4.2.1 (java 1.5)

{"id":1,"method":"object.deleteAll","params":["subscriber"]}

这个数据包从服务器返回:

{"id":null,"error":{"code":-32700,"message":"Unexpected character ('P' (code 80)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')"}}
{"id":null,"error":{"code":-32700,"message":"Unexpected character ('c' (code 99)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')"}}
{"id":null,"error":{"code":-32700,"message":"Unexpected character ('C' (code 67)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')"}}
{"id":null,"error":{"code":-32700,"message":"Unexpected character ('C' (code 67)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')"}}
{"id":null,"error":{"code":-32700,"message":"Unexpected character ('H' (code 72)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')"}}
{"id":null,"error":{"code":-32700,"message":"Unexpected character ('C' (code 67)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')"}}
{"id":null,"error":{"code":-32700,"message":"Unexpected character ('U' (code 85)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')"}}
{"id":null,"error":{"code":-32700,"message":"Line must contain a JSON object"}}

最佳答案

在您的工作示例中,您使用 nc,这意味着您直接写入 TCP,而不是使用 HTTP,对吗?

因此,您使用 HTTPClient 的 HTTP 调用正在发送意外数据。这些错误表明问题出在 HTTP 包装器上。

“POST”中的意外字符“P”、“Content-Type”中的“C”等等。服务器正在读取每一行,期望是原始 JSON 字符串,但却获取了 HTTP。

解决方案:您可能想使用原始 Java socket相反。

关于java - 无法使用 Java 中的 HTTP 客户端将 JSON 发布到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14774729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com