代码之家  ›  专栏  ›  技术社区  ›  hoju

响应中的URLLIB2多集cookie头

  •  3
  • hoju  · 技术社区  · 14 年前

    我正在使用urllib2与一个发送多个set cookie头的网站进行交互。然而,响应头字典只包含一个-似乎重复的键互相覆盖。

    有没有使用urllib2访问重复头的方法?

    2 回复  |  直到 8 年前
        1
  •  5
  •   Jason R. Coombs    14 年前

    根据 urllib2 docs , the .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'
    
        2
  •  0
  •   reflective_mind    8 年前

    set-cookie 不过不同。来自RFC 6265:

    源服务器不应将多个set cookie头字段折叠到 一个标题字段。折叠HTTP头的常见机制 字段(即[rfc2616]中定义的字段)可能会更改 设置cookie头字段,因为使用了%x2c(“,”)字符 将cookie设置为与这种折叠冲突的方式。

    从理论上讲,这看起来像一个bug。