无法使用Java中的HTTP客户端将JSON发布到服务器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了无法使用Java中的HTTP客户端将JSON发布到服务器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3249字,纯文字阅读大概需要5分钟。
内容图文
我正在尝试将JSON对象发送到自定义端口上的服务器.但是我从来没有得到任何来自服务器的回复.我认为错误可能在字符串实体中,但我无法弄清楚它是什么.
我已经看过其他这些问题了:
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();
}
}
控制台在开始时打印“开始”但我从未从“结束”获得任何输出,也没有从异常中获得任何堆栈跟踪.调试调试器时停止在“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中的HTTP客户端将JSON发布到服务器全部内容,希望文章能够帮你解决无法使用Java中的HTTP客户端将JSON发布到服务器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。