LINUX.ORG.RU

Несколько вопросов по HTTP в питоне.


0

1

Хочется сделать скрипт на питоне для специфического тестирования одного нестандартного HTTP-сервера. Требуется иметь контроль над порядком следования заголовков в HTTP и их содержимым, над порядком представления значений в cookies и самими cookies. В общем нужен полный контроль, чтобы имитировать тот или иной браузер, в то же время не хочется делать свою HTTP-библиотеку. Очень нужна поддержка https. Есть ли жизнь на марсе?

Главная проблема в том что dict (в котором вероятней всего хранятся заголовки) не хранит порядок.
ИМХО, только переопределить стандартный dict или наследоваться от существующей библиотеки.

urxvt ★★★★★
()

Забыл [хочется странного]. В RFC говорится что порядок заголовков значения не должен иметь. Но вроде можно с urllib(2?) задать через build_opener.

Kalashnikov ★★★
()
Ответ на: комментарий от Kalashnikov

Боюсь это только обвертка. Вот исходник:

[code=python]
class Request:

def __init__(self, url, data=None, headers={},
origin_req_host=None, unverifiable=False):
...
self.headers = {}
...
[/code]

urxvt ★★★★★
()

и как же их порядок может повлиять на что-либо?

trashymichael ★★★
()

можешь взять twisted и переопределить метод _writeHeaders из twisted.web._newclient.Request, или httplib и переопределить _send_request из HTTPConnection. насчет cookies нужно смотреть cookielib и переопределять соответствующие методы из CookieJar, наверное.

hatefu1_dead
()
Ответ на: комментарий от urxvt

Главная проблема в том что dict (в котором вероятней всего хранятся заголовки) не хранит порядок.

AFAIK, urllib2 использует список. Поэтому add_header прекрасно работает.

baverman ★★★
()
Ответ на: комментарий от baverman

В каком же это месте там список? В итоге заголовки помещаются в Request, который кладет их в dict.

urxvt ★★★★★
()
Ответ на: комментарий от boombick

А чем не угодил curl?

я про него даже не подумал. а он умеет заголовки в нужном порядке отправлять?

hatefu1_dead
()

Короче, чуваки. Про заголовки в нужном порядке:

>>> import httplib
>>> from collections import OrderedDict
>>> h = OrderedDict(('X-A','a'),('X-B','b'),('X-C','c'))
>>> c = httplib.HTTPConnection('localhost')
>>> c.set_debuglevel(1)
>>> r = c.request('GET','/','',h)
send: 'GET / HTTP/1.1\r\nHost: localhost\r\nAccept-Encoding: identity\r\nX-A: a\r\nX-B: b\r\nX-C: c\r\n\r\n'
kiverattes ★☆
() автор топика
Ответ на: комментарий от kiverattes

Не раскрыт вопрос зачем это все надо?

pylin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.