urllib2.proxyhandler в Python 2.5 - PullRequest
       4

urllib2.proxyhandler в Python 2.5

0 голосов
/ 16 сентября 2010

В Windows XP, Python 2.5 и 2.6 я тестировал следующий код:

import urllib2
proxy= urllib2.ProxyHandler({'http': '127.0.0.1:8080'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
urllib2.urlopen('http://www.google.com/')

В приведенном выше коде я получаю исключение BadStatusLine из строки 349 httplib.py.

У меня есть прокси, работающий на 127.0.0.1:8080, который работает (я могу настроить браузер на использование его с proxyswitchy, и когда он включен, я могу получить доступ к сайтам, которые заблокированы, когда он выключен [в Китае]).

если я поменяю его на прокси socks,

proxy= urllib2.ProxyHandler({'socks': '127.0.0.1:8080'})

Тогда прокси вообще не используется.

Я получил код из вопроса на Прокси с urllib2 , и он почти такой же - что может быть не так?

Обновление: urllib2 не поддерживает прокси-носки.

В итоге все получилось с curl:

c = pycurl.Curl()

#stupid GFW
if settings.CHINA:
    c.setopt(pycurl.PROXY, '127.0.0.1')
    c.setopt(pycurl.PROXYPORT, 8087)
    c.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS5)

Ответы [ 3 ]

2 голосов
/ 16 сентября 2010

urllib2 ProxyHandler не предназначен для поддержки протокола SOCKS. Возможно этот ответ поможет.

0 голосов
/ 17 сентября 2010

ОБНОВЛЕНИЕ: я нахожусь за большим брандмауэром в Китае.Это усугубляло проблему.Gfw разрывал соединения и отравлял DNS.

Мне не удалось заставить работать ни одно из решений urllib2.Но Pycurl, кажется, работает, и он обходит проблему «сброса соединения».fb / twitter все еще были заблокированы.

Добавление их IPS в мой файл hosts работает - поэтому для более масштабного решения необходима настройка прокси-сервера dns.

0 голосов
/ 16 сентября 2010

Предполагается, что ваш локальный прокси-сервер является HTTP-прокси, а не прокси-сервером socks.Попробуйте это:

import urllib2
proxy= urllib2.ProxyHandler({'http': 'http://127.0.0.1:8080/'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
urllib2.urlopen('http://www.google.com/')
...