Ошибка httplib CannotSendRequest в WSGI - PullRequest
       30

Ошибка httplib CannotSendRequest в WSGI

16 голосов
/ 18 декабря 2009

Я использовал две разные библиотеки python oauth с Django для аутентификации в твиттере. Настройка на apache с WSGI. Когда я перезагружаю сервер, все работает отлично в течение примерно 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()

CannotSendRequest

Ответы [ 2 ]

29 голосов
/ 18 декабря 2009

Это исключение возникает, когда вы повторно используете объект httplib.HTTP для нового запроса, в то время как вы не вызывали его метод getresponse() для предыдущего запроса. Вероятно, была какая-то другая ошибка, которая оставила соединение в разорванном состоянии. Самый простой надежный способ решения проблемы - создание нового соединения для каждого запроса, а не его повторное использование. Конечно, это будет немного медленнее, но я думаю, что это не проблема, если вы запускаете приложение в одном процессе и в одном потоке.

0 голосов
/ 02 мая 2015

Также проверьте свою версию Python. У меня была похожая ситуация после обновления до Py-2.7 от Py-2.6. В Py-2.6 все работало без проблем. Py-2.7 httplib по умолчанию использует HTTP / 1.1, что заставляет сервер не отправлять обратно ответ Connection: close в ответе, поэтому обработка соединения была нарушена. В моем случае это работало с HTTP / 1.0.

...