我的Python脚本,包含以下行:
from requests import post
...
while(1):
result = readSensors().result
payload["z"] = (result['zforce'])
payload["x"] = (result['xforce'])
payload["y"] = (result['yforce'])
payload["light"] = (result['light'] )
payload["pitch"] = ( result["pitch"] )
payload["azimuth"] = ( result["azimuth"] )
payload["roll"] = ( result["roll"] )
post(SERVER, data = payload )
sleep(0.02)
到我的Heroku webapp服务器会导致Python错误httplib.IncompleteRead: IncompleteRead(0 bytes read)
错误。
web.js
文件如下所示:
var server = http.createServer(function(request, response){
if (request.method == 'POST'){
var body = '';
request.on('data', function (data) {
body += data;
});
request.on('end', function () {
//send data to clients.
io.sockets.emit( 'data', parse(body) );
});
response.end()
}
server.listen(process.env.PORT || 5000);
var io = io.listen(server);
io.set('log level', 1);
io.configure(function () {
io.set("transports", ["xhr-polling"]);
io.set("polling duration", 10);
});
答案 0 :(得分:1)
这更可能是您的“webapp服务器”而不是客户端代码的问题,因此您必须包含有关服务器的更多信息。
这样做的一个常见原因是,您发回了Transfer-Encoding: chunked
的回复,但未正确提供chunk-encoded的回复正文。
例如,以下服务器代码......
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
class MyRequestHander(BaseHTTPRequestHandler):
def do_GET(self):
self.send_bogus_response()
def do_POST(self):
self.send_bogus_response()
def send_bogus_response(self):
self.send_response(200)
self.send_header('Content-Type', 'text/plain')
self.send_header('Connection', 'close')
self.send_header('Transfer-Encoding', 'chunked')
self.end_headers()
server = HTTPServer(('', 8000), MyRequestHander)
server.serve_forever()
...使用requests
库调用时会导致相同的错误...
>>> import requests
>>> requests.post('http://localhost:8000', data={'foo':'bar'})
...
httplib.IncompleteRead: IncompleteRead(0 bytes read)
Apparently,如果服务器没有读取整个请求体,也会发生这个问题,并且可能还有其他一些原因可能会发生这种情况,但我无法确定哪个是很可能在不了解服务器设置的情况下。
<强>更新强>
web.js
代码存在很多问题,但主要问题是您在读取POST数据之前发回了响应。 response.end()
需要进入request.on('end', ...)
函数,否则您的request.on(...)
函数都不会被调用。
以下代码应该消除这个问题...
var server = http.createServer(function(request, response)
{
if (request.method == 'POST')
{
var body = '';
request.on('data', function(data)
{
body += data;
});
request.on('end', function()
{
//send data to clients.
io.sockets.emit('data', parse(body));
response.end();
});
}
});
......虽然我不确定parse(...)
函数应该是什么。