Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 28, 2009 16:07:45

nJLyTo
От:
Зарегистрирован: 2008-11-11
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Proxy

С появлением библиотеки urllib2 в Python s60, появилась возможность работы через proxy сервер. На одном из форумов нашел скрипт чтения странички через прокси. Но как организовать работу с socket'ами через proxy я не разобрался, прошу помощи.



Офлайн

#2 Янв. 29, 2009 17:02:54

inlanger
От:
Зарегистрирован: 2009-01-17
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

Proxy

А что именно не понятно? Там вроде лёгкий пример…



Офлайн

#3 Янв. 29, 2009 17:09:25

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Proxy

Это уже нужно копать модуль socket, а не urllib2



Офлайн

#4 Янв. 30, 2009 00:16:53

arok
От:
Зарегистрирован: 2008-01-15
Сообщения: 145
Репутация: +  0  -
Профиль   Отправить e-mail  

Proxy

Копать как раз нужно urllib2, т.к с проксями он работает, в отличие от socket. Ну и без спецификации socks4,5 тут не обойтись, если работать требуется с подобными прокси.
П.С вот это чудо http://socksipy.sourceforge.net/ тоже может помочь, если удасться его “завести” то обязательно отпишись тут:)



Офлайн

#5 Янв. 30, 2009 09:02:48

ice
От:
Зарегистрирован: 2008-01-12
Сообщения: 156
Репутация: +  0  -
Профиль   Отправить e-mail  

Proxy

Но как организовать работу с socket'ами через proxy я не разобрался, прошу помощи.
А что это значит? Какой протокол, что надо передавать/принимать?

и простыми сокетами через прокс работал. (правда прокс мой и поддержка CONNECT там есть)

т.к с проксями он работает, в отличие от socket.
вот глупости-то. С чем ему скажешь, с тем он и будет работать :D вопрос в том, сколько нужно написать кода для socket, чтоб результата добиться.



Отредактировано (Янв. 30, 2009 09:08:25)

Офлайн

#6 Янв. 31, 2009 00:45:55

arok
От:
Зарегистрирован: 2008-01-15
Сообщения: 145
Репутация: +  0  -
Профиль   Отправить e-mail  

Proxy

Не правильно выразился. Перефразирую. В urllib(2) уже реализована работат с прокси, по крайней мере с http прокси он у меня работал. Проанализировав код модуля можно кое что для себя уяснить, если совсем уж ни чего не известно в специфике ‘общения’ с прокси ('общения' не в смысле работы с модулями оболочками, а в смысле работы на прямую, через socketы, как и требовалось в сабже).
Ну а принцип ‘общения’ с socks прокси можно подчерпнуть из выше упомянутой ссылки. Хотя заставить корректно работать этот модуль(с заведомо рабочими прокси) у меня так и не получилось, да и не очень то надо было:)



Офлайн

#7 Фев. 19, 2010 16:38:50

topazz
От:
Зарегистрирован: 2008-09-12
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Proxy

Есть у кого рабочий кусок кода с 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'})



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version