Java 请求正文在POST上为空
创建了一个android应用程序,将数据发布到nodejs服务器 nodejs服务器是一个简单的httpweb服务器,正在运行Java 请求正文在POST上为空,java,android,node.js,Java,Android,Node.js,创建了一个android应用程序,将数据发布到nodejs服务器 nodejs服务器是一个简单的httpweb服务器,正在运行 var http = require('http'); module.exports = http.createServer(function (req, resp) { console.log("Request received!"); resp.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8
var http = require('http');
module.exports = http.createServer(function (req, resp) {
console.log("Request received!");
resp.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});
if (req.method == 'POST') {
var body = '';
req.on('data', function (data) {
body += data;
});
req.on('end', function () {
console.log("Body = " + body);
// use POST
});
}
});
客户端(Android应用程序)使用以下方式发送post请求:
URL url = new URL(endpoint);
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000);
conn.setConnectTimeout(10000);
conn.setRequestMethod("POST");
conn.setRequestProperty("User-Agent", "Android");
conn.setDoInput(true);
conn.setDoOutput(true);
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
writer.write(getString());
writer.close();
os.close();
getString()方法定义为:
JSONObject root = new JSONObject();
root.put("test", "Testing");
return root.toString();
我在服务器上收到请求,但正文是空的
我尝试将express与bodyParser结合使用,得到了相同的结果。这是旧版本的express。即使是最新版本的express,我也有同样的问题。在本例中,我必须单独包含bodyParser模块并调用bodyParser()。在旧版本和新版本中,我都调用了“req.body”(它也是空的)
有什么想法吗??不确定为什么正文中没有填充json字符串 我不做node.js,但是你不需要从客户端发送正确的
内容类型吗<代码>conn.setRequestProperty(“内容类型”,“应用程序/x-www-form-urlencoded”)我想是code>或“application/json”。如果您已验证是否进入If语句,是否已尝试将对resp.writeHead()
的调用延迟到req.on('end')中
callback?您可以尝试使用Wireshark之类的工具来检查连接上发送了什么或没有发送什么。我可以通过执行以下两项操作让客户端将测试数据发送到服务器:1。正如@BrianRoach所建议的,设置内容类型
标题字段。2.在os.close()
之后,我添加了这一行:InputStream is=conn.getInputStream()代码>为什么这有帮助?我不知道。但是服务器接收JSON数据,客户端抛出一个java.net.SocketTimeoutException
。我没有得到任何地方去修复它——要么是服务器/客户端之间没有通信,要么就是这个。祝你好运