查看: 1376|回复: 2

in putrequest raise CannotSendRequest() CannotSendRequest

[复制链接]

13

主题

53

帖子

131

积分

注册会员

Rank: 2

积分
131
发表于 2018-9-27 09:19:48 | 显示全部楼层 |阅读模式
我在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()
回复

使用道具 举报

10

主题

82

帖子

200

积分

中级会员

Rank: 3Rank: 3

积分
200
发表于 2018-9-27 09:21:30 | 显示全部楼层
当你重用httplib时,会引发此异常。你没有调用前一个请求的getresponse()方法。可能还有其他一些错误使连接处于中断状态。修复问题最简单可靠的方法是为每个请求创建新连接,而不是重用它。当然,它会稍微慢一些,但我认为在单个进程和线程中运行应用程序并不是问题。
回复

使用道具 举报

22

主题

107

帖子

266

积分

中级会员

Rank: 3Rank: 3

积分
266
发表于 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中没有问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表