urllib2 несколько заголовков Set-Cookie в ответ - PullRequest
3 голосов
/ 16 марта 2010

Я использую urllib2 для взаимодействия с веб-сайтом, который отправляет несколько заголовков Set-Cookie. Однако словарь заголовка ответа содержит только один - кажется, дублирующиеся ключи перекрывают друг друга.

Есть ли способ получить доступ к дублирующимся заголовкам с помощью urllib2?

Ответы [ 2 ]

5 голосов
/ 16 марта 2010

Согласно urllib2 документам , атрибут .headers объекта результирующего URL-адреса представляет собой httplib.HTTPMessage (который, по-видимому, недокументирован, по крайней мере, в документах Python).

Тем не менее,

help(httplib.HTTPMessage)
...

If multiple header fields with the same name occur, they are combined
according to the rules in RFC 2616 sec 4.2:

Appending each subsequent field-value to the first, each separated
by a comma. The order in which header fields with the same field-name
are received is significant to the interpretation of the combined
field value.

Итак, если вы обращаетесь к u.headers ['Set-Cookie'], вы должны получить один заголовок Set-Cookie со значениями, разделенными запятыми.

Действительно, похоже, это так.

import httplib
from StringIO import StringIO

msg = \
"""Set-Cookie: Foo
Set-Cookie: Bar
Set-Cookie: Baz

This is the message"""

msg = StringIO(msg)

msg = httplib.HTTPMessage(msg)

assert msg['Set-Cookie'] == 'Foo, Bar, Baz'
0 голосов
/ 06 октября 2016

set-cookie отличается, хотя. Из RFC 6265:

Исходным серверам НЕ СЛЕДУЕТ складывать несколько полей заголовка Set-Cookie в одно поле заголовка. Обычный механизм сворачивания заголовков HTTP поля (т. е. как определено в [RFC2616]) могут изменить семантику поле заголовка Set-Cookie, потому что используется символ% x2C (",") от Set-Cookie таким образом, что конфликтует с таким сворачиванием.

Теоретически это выглядит как ошибка.

...