WSGI中的httplib CannotSendRequest错误

2024-10-01 04:45:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Django中使用了两个不同的python oauth库来验证twitter。安装程序在带有WSGI的apache上。当我重新启动服务器时,一切正常工作大约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()

无法发送请求


Tags: inpytokenauthgetresponserequestlib
2条回答

还要检查Python版本。在从Py-2.6升级到Py-2.7之后,我遇到了类似的情况。在Py-2.6中,一切工作正常,没有任何问题。Py-2.7httplib默认使用HTTP/1.1,这使得服务器没有发送回响应中的Connection:close选项,因此连接处理被中断。不过,在我的例子中,这在HTTP/1.0中是有效的。

当您对新请求重用httplib.HTTP对象时,如果您没有对前一个请求调用其getresponse()方法,则会引发此异常。可能在这个错误之前还有其他一些错误导致连接处于断开状态。解决这个问题最简单可靠的方法是为每个请求创建新的连接,而不是重用它。当然,速度会慢一点,但我认为在单进程和单线程中运行应用程序并不是问题。

相关问题 更多 >