【问题标题】:httplib CannotSendRequest error in WSGIWSGI 中的 httplib 无法发送请求错误
【发布时间】:2010-12-27 21:26:07
【问题描述】:

我在 Django 中使用了两个不同的 python oauth 库来通过 twitter 进行身份验证。设置是在带有 WSGI 的 apache 上。当我重新启动服务器时,一切正常运行了大约 10 分钟,然后 httplib 似乎被锁定(请参阅以下错误)。

我只运行 1 个进程和 1 个 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()

无法发送请求

【问题讨论】:

    标签: python twitter oauth wsgi httplib


    【解决方案1】:

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

    【讨论】:

    • 太棒了!您的提示使我在我正在使用的 twitter auth 库中找到了错误的行。非常感谢!
    • @Dave 因为我的 twitter auth 库也有同样的问题,你能分享一下你做了什么改变吗?
    • @Dave 有什么解决方案?如果您找到了解决方案,通常会留下解决方案...
    • 似乎我们中的一些人最近开始遇到这个问题。有知道的修复方法吗?
    • 戴夫回答过你吗?
    【解决方案2】:

    还要检查您的 Python 版本。从 Py-2.6 更新到 Py-2.7 后,我也遇到了类似的情况。在 Py-2.6 中,一切正常,没有任何问题。 Py-2.7 httplib 默认使用 HTTP/1.1,这使得服务器没有在响应中发回 Connection: close 选项,因此连接处理被破坏。就我而言,这适用于 HTTP/1.0。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      • 2021-07-12
      • 1970-01-01
      • 2021-01-14
      • 1970-01-01
      • 2022-01-06
      相关资源
      最近更新 更多