«Ошибка HTTP 409: конфликт» при использовании urllib.request.urlopen () - PullRequest
1 голос
/ 11 февраля 2010

В Python 3.1 при попытке запустить этот код:

from urllib import request

def test():
    request.urlopen("http://www.google.com")

test()

Я получаю ошибку HTTP 409. Трассировка стека:

Traceback (most recent call last):
  File "C:\Users\Beau\Python\pokescrape.py", line 6, in <module>
    test()
  File "C:\Users\Beau\Python\pokescrape.py", line 4, in test
    request.urlopen("http://www.google.com")
  File "C:\Program Files\Python\lib\urllib\request.py", line 119, in urlopen
    return _opener.open(url, data, timeout)
  File "C:\Program Files\Python\lib\urllib\request.py", line 353, in open
    response = meth(req, response)
  File "C:\Program Files\Python\lib\urllib\request.py", line 465, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Program Files\Python\lib\urllib\request.py", line 385, in error
    result = self._call_chain(*args)
  File "C:\Program Files\Python\lib\urllib\request.py", line 325, in _call_chain
    result = func(*args)
  File "C:\Program Files\Python\lib\urllib\request.py", line 560, in http_error_302
    return self.parent.open(new, timeout=req.timeout)
  File "C:\Program Files\Python\lib\urllib\request.py", line 353, in open
    response = meth(req, response)
  File "C:\Program Files\Python\lib\urllib\request.py", line 465, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Program Files\Python\lib\urllib\request.py", line 391, in error
    return self._call_chain(*args)
  File "C:\Program Files\Python\lib\urllib\request.py", line 325, in _call_chain
    result = func(*args)
  File "C:\Program Files\Python\lib\urllib\request.py", line 473, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)

А фактическая ошибка, как напечатано, составляет:

urllib.error.HTTPError: HTTP Error 409: Conflict

Я за прокси-сервером, установленным через скрипт конфигурации; У меня не было проблем с подключением к интернету.

С какой стати я получаю ошибку HTTP 409?

Ответы [ 3 ]

1 голос
/ 25 февраля 2010

Я тоже столкнулся с этой проблемой (также из Ланкастера, как это происходит) и обнаружил, что если я установлю переменную окружения http_proxy, Python будет использовать ее. В этом случае (в Windows) это будет:

set http_proxy=http://wwwcache.lancs.ac.uk:8080

и * nix:

export http_proxy=http://wwwcache.lancs.ac.uk:8080/

Редактировать: Спасибо Бо Мартинесу за исправление * nix.

1 голос
/ 12 февраля 2010

HTTP-ошибка, которую вы видите, - это сообщение, которое выдает удаленный конец (или прокси-сервер). Ошибка HTTP 409 действительно является «Конфликтом», что обычно означает, что были сделаны конфликтующие запросы. Если вы действительно используете прокси-сервер, я бы заподозрил, что он является источником 409-го, но для этого потребуется дополнительная отладка. Либо используйте инструмент типа wireshark для анализа фактического трафика, либо используйте http.client.HTTPConnection напрямую и включите его отладку.

0 голосов
/ 12 февраля 2010

Оказывается, мне пришлось вручную устанавливать прокси в коде. Я предполагаю, что это произошло потому, что я использовал автоматический прокси-скрипт.

Для тех, у кого похожая проблема, вот код, который я использовал:

from urllib import request
import random

PROXY_URL = "http://wwwcache-{}.lancs.ac.uk:8080/"

def setLancsProxy():
    httpProxy = PROXY_URL.format(random.randrange(4))
    proxy = request.ProxyHandler({"http" : httpProxy})
    opener = request.build_opener(proxy)
    request.install_opener(opener)

Я нашел http://groups.google.com/group/comp.lang.python/browse_thread/thread/a9db4a2f398ee3a4 и http://www.wkoorts.com/wkblog/2008/10/27/python-proxy-client-connections-requiring-authentication-using-urllib2-proxyhandler/ наиболее полезными в решении неясной проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...