黑崎一护 发表于 2018-9-27 09:19:48

in putrequest raise CannotSendRequest() CannotSendRequest

我在Django中使用了两个不同的python oauth库来使用twitter进行身份验证。安装是在apache和WSGI上进行的。当我重新启动服务器时,10分钟内一切正常,然后httplib似乎锁住了(请参阅以下错误)。我只运行一个进程和一个线程的WSGI,但这似乎没有什么区别。我不知道为什么它锁住并给出了这个CannotSendRequest错误。我花了很多时间在这个令人沮丧的问题上。如有任何提示/建议,我将不胜感激。
File "/usr/lib/python2.5/site-packages/django/core/handlers/base.py", line 92, in get_response
response = callback(request, *callback_args, **callback_kwargs)

File "mypath/auth/decorators.py", line 9, in decorated
return f(*args, **kwargs)

File "mypath/auth/views.py", line 30, in login
token = get_unauthorized_token()

File "/root/storm/eye/auth/utils.py", line 49, in get_unauthorized_token
return oauth.OAuthToken.from_string(oauth_response(req))

File "mypath/auth/utils.py", line 41, in oauth_response
connection().request(req.http_method, req.to_url())

File "/usr/lib/python2.5/httplib.py", line 866, in request
self._send_request(method, url, body, headers)

File "/usr/lib/python2.5/httplib.py", line 883, in _send_request
self.putrequest(method, url, **skips)

File "/usr/lib/python2.5/httplib.py", line 770, in putrequest
raise CannotSendRequest()

污妖王 发表于 2018-9-27 09:21:30

当你重用httplib时,会引发此异常。你没有调用前一个请求的getresponse()方法。可能还有其他一些错误使连接处于中断状态。修复问题最简单可靠的方法是为每个请求创建新连接,而不是重用它。当然,它会稍微慢一些,但我认为在单个进程和线程中运行应用程序并不是问题。

马猴烧酒 发表于 2018-9-27 09:23:18

还要检查Python版本。我从Py-2.6更新到Py-2.7后也有类似的情况。在Py-2.6中,所有工作都没有任何问题。Py-2.7 httplib默认使用HTTP/1.1,这使得服务器没有在响应中发送回连接,因此连接处理中断。在HTTP/1.0中没有问题。
页: [1]
查看完整版本: in putrequest raise CannotSendRequest() CannotSendRequest