Python urllib и urllib2 не открывают URL-адреса localhost?

В Python я могу использовать urllib2 (и urllib) для открытия внешних URL-адресов, таких как Google. Однако я сталкиваюсь с проблемами при открытии URL-адресов localhost. У меня есть python SimpleHTTPServer, работающий на порту 8280, который я могу просмотреть, чтобы успешно использовать http: // localhost: 8280 / .

python -m SimpleHTTPServer 8280

Также стоит отметить, что я запускаю Ubuntu с CNTLM, работающим для обработки аутентификация на нашем корпоративном веб-прокси. Следовательно, wget на самом деле не работает с localhost, поэтому я не думаю, что это проблема urllib!

Тестовый сценарий (test_urllib2.py):

import urllib2

print "Opening Google..."
google = urllib2.urlopen("http://www.google.com/")
print google.read(100)
print "Google opened."

print "Opening localhost..."
localhost = urllib2.urlopen("http://localhost:8280/")
print localhost.read(100)
print "localhost opened."

Вывод:

$ ./test_urllib2.py 
Opening Google...
<
Google opened.
Opening localhost...
Traceback (most recent call last):
  File "./test_urllib2.py", line 10, in 
    localhost = urllib2.urlopen("http://localhost:8280/")
  File "/usr/lib/python2.6/urllib2.py", line 126, in urlopen
    return _opener.open(url, data, timeout)
  File "/usr/lib/python2.6/urllib2.py", line 397, in open
    response = meth(req, response)
  File "/usr/lib/python2.6/urllib2.py", line 510, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib/python2.6/urllib2.py", line 429, in error
    result = self._call_chain(*args)
  File "/usr/lib/python2.6/urllib2.py", line 369, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.6/urllib2.py", line 605, in http_error_302
    return self.parent.open(new, timeout=req.timeout)
  File "/usr/lib/python2.6/urllib2.py", line 391, in open
    response = self._open(req, data)
  File "/usr/lib/python2.6/urllib2.py", line 409, in _open
    '_open', req)
  File "/usr/lib/python2.6/urllib2.py", line 369, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.6/urllib2.py", line 1161, in http_open
    return self.do_open(httplib.HTTPConnection, req)
  File "/usr/lib/python2.6/urllib2.py", line 1134, in do_open
    r = h.getresponse()
  File "/usr/lib/python2.6/httplib.py", line 986, in getresponse
    response.begin()
  File "/usr/lib/python2.6/httplib.py", line 391, in begin
    version, status, reason = self._read_status()
  File "/usr/lib/python2.6/httplib.py", line 355, in _read_status
    raise BadStatusLine(line)
httplib.BadStatusLine

РЕШЕНИЕ: Проблема заключалась в действительно, потому что я использую CNTLM за нашим корпоративным веб-прокси (я не могу точно сказать, почему это вызвало проблему). Решением было использовать ProxyHandler:

proxy_support = urllib2.ProxyHandler({})
opener = urllib2.build_opener(proxy_support)
print opener.open("http://localhost:8380/").read(100)

Спасибо loki2302 за указание мне здесь .

7
задан Community 23 May 2017 в 11:48
поделиться