gpt4 book ai didi

python - 对 Heroku 的 POST 请求导致 Python IncompleteRead 错误

转载 作者:太空宇宙 更新时间:2023-11-03 18:57:25 27 4
gpt4 key购买 nike

我的 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);
});

最佳答案

这更有可能是您的“网络应用服务器”而不是客户端代码的问题,因此您必须包含有关服务器的更多信息。

出现这种情况的一个常见原因是您使用 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(...) 函数应该是什么。

关于python - 对 Heroku 的 POST 请求导致 Python IncompleteRead 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16971895/

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