来自客户端的java do json远程过程调用(RPC)
我正在开发一个java应用程序。我需要调用一个远程api方法。假设我有以下信息:remote_ip
,remote_port
,remote_method_name
和一些key-value
数据要发布。我需要通过TCP协议将数据发布到远程服务器。我用这种方式测试了Sockets
,但不起作用:
Socket socket = new Socket(remote_ip, remote_port);
BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF8"));
String params = URLEncoder.encode("key1", "UTF-8")
+ "=" + URLEncoder.encode(value1, "UTF-8");
params += "&" + URLEncoder.encode("key2", "UTF-8")
+ "=" + URLEncoder.encode(value2, "UTF-8");
wr.write("POST " + remote_method_name + " HTTP/1.0\r\n");
wr.write("Content-Length: " + params.length() + "\r\n");
wr.write("Content-Type: application/x-www-form-urlencoded\r\n");
wr.write("\r\n");
wr.write(params);
wr.flush();
有人能告诉我如何以正确的方式调用api方法吗
如果可能的话,我想不使用任何第三方库
任何帮助都将不胜感激
# 1 楼答案
我认为原因是您提供的“远程方法名称”是错误的。 由于您正在进行http调用,这里有一个简单的示例供您参考。 对于您正在阅读的页面,请求应该是:
# 2 楼答案
首先,尽管您说希望使用原始tcp套接字,但很明显,您正在尝试发出HTTP rest请求。使用http客户端将更容易、更合适。如果不想使用第三方库,请使用内置的
HttpUrlConnection
(example usage)另一个优点是,使用http客户机会给您一条清晰的(er)错误消息
第二,你确定这种内容类型吗?如果您试图提交json,通常要设置的头是
Content-Type: application/json
第三,如果你的404找不到,我敢打赌你发布的url是不正确的。与提供此API规范的人一起仔细检查域和baseurl。现在你的URL基本上是http://remote_ip:remote_port/remote_method_name,这不太可能是正确的