urllib2を使用して、複数のSet-Cookieヘッダーを送り返すWebサイトとやり取りしています。ただし、応答ヘッダーディクショナリには1つしか含まれていません-重複するキーが相互にオーバーライドしているようです。
urllib2で重複するヘッダーにアクセスする方法はありますか?
urllib2 docsによると.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 ヘッダーが 1 つ取得されます。
実際、これは事実のようです。
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'
set-cookie
は違いますが。RFC 6265 から:
オリジン サーバーは、複数の Set-Cookie ヘッダー フィールドを 1 つのヘッダー フィールドに折りたたむべきではありません (SHOULD NOT)。HTTP ヘッダー フィールドを折りたたむための通常のメカニズム (つまり、[RFC2616] で定義されている) は、Set-Cookie ヘッダー フィールドのセマンティクスを変更する可能性があります。こんな折り方で。
理論的には、これはバグのように見えます。