Форум сайта python.su
С появлением библиотеки urllib2 в Python s60, появилась возможность работы через proxy сервер. На одном из форумов нашел скрипт чтения странички через прокси. Но как организовать работу с socket'ами через proxy я не разобрался, прошу помощи.
Офлайн
А что именно не понятно? Там вроде лёгкий пример…
Офлайн
Это уже нужно копать модуль socket, а не urllib2
Офлайн
Копать как раз нужно urllib2, т.к с проксями он работает, в отличие от socket. Ну и без спецификации socks4,5 тут не обойтись, если работать требуется с подобными прокси.
П.С вот это чудо http://socksipy.sourceforge.net/ тоже может помочь, если удасться его “завести” то обязательно отпишись тут:)
Офлайн
Но как организовать работу с socket'ами через proxy я не разобрался, прошу помощи.А что это значит? Какой протокол, что надо передавать/принимать?
т.к с проксями он работает, в отличие от socket.вот глупости-то. С чем ему скажешь, с тем он и будет работать :D вопрос в том, сколько нужно написать кода для socket, чтоб результата добиться.
Отредактировано (Янв. 30, 2009 09:08:25)
Офлайн
Не правильно выразился. Перефразирую. В urllib(2) уже реализована работат с прокси, по крайней мере с http прокси он у меня работал. Проанализировав код модуля можно кое что для себя уяснить, если совсем уж ни чего не известно в специфике ‘общения’ с прокси ('общения' не в смысле работы с модулями оболочками, а в смысле работы на прямую, через socketы, как и требовалось в сабже).
Ну а принцип ‘общения’ с socks прокси можно подчерпнуть из выше упомянутой ссылки. Хотя заставить корректно работать этот модуль(с заведомо рабочими прокси) у меня так и не получилось, да и не очень то надо было:)
Офлайн
Есть у кого рабочий кусок кода с soket и передачей POST.
Не могу разобраться почему POST запрос не проходит.
Вот кусок кода:
h = { 'Host':'ya.ru',
'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language':'ru,en-us;q=0.7,en;q=0.3',
'Accept-Charset':'windows-1251,utf-8;q=0.7,*;q=0.7',
'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
'Connection': 'keep-alive',
'Cache-Control': 'no-cache'
}
def advOpener(method, url, headers, post=None, proxy=None):
uris = urlparse.urlparse(url)
_head = copy.copy(headers)
_head['Host']= uris.netloc
_headers = ''
for key, val in _head.iteritems():
_headers += key + ': ' + val + '\r\n'
_headers += '\r\n'
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
if proxy:
adres, port = proxy.split(':')
s.connect((adres, int(port)))
else:
s.connect((uris.netloc, 80))
s.send(method + url + ' HTTP/1.1\r\n')
s.send(_headers)
if post:
query = ''
for key, val in post.iteritems():
query += key + '=' + val
s.send('Content-Length:' + str(len(query)) + '\r\n')
s.sendall(query)
data = ''
while True:
content = s.recv(8196)
if content:
print content
data += content
else: break
s.close()
if data:
return data
foo = advOpener('POST', url, h, post = {'zpost':'topaz'})
Офлайн