• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ethsol
V2EX  ›  程序员

作为一个 python 新手,我很无语, urllib2 的 add_header 搞了一天,求助解决方法

  •  1
     
  •   ethsol · Oct 12, 2016 · 8532 views
    This topic created in 3531 days ago, the information mentioned may be changed or developed.

    代码

    ...
    >>> h = {"Content-Type": "application/json"}
    >>> req = urllib2.Request(url,js,h)
    >>> req.has_header("Content-Type")
    False
    >>> req.get_header("Content-type")
    'application/json'
    

    key 被 capitalize 了,我这个 header 就要 Content-Type 的,怎么搞?

    18 replies    2016-10-13 13:02:08 +08:00
    upczww
        1
    upczww  
       Oct 12, 2016 via Smartisan T1   ❤️ 2
    你应该试试 requests.
    HTTP for Humans.
    shadowmydx
        2
    shadowmydx  
       Oct 12, 2016   ❤️ 2
    这个很简单,这个 header 是 Request 对象中一个叫 headers 的成员,如果一定要大写,你直接这么写就可以:
    h = {"Content-Type": "application/json"}
    req = urllib2.Request(url, js, headers=h)
    req.headers = h
    print req.has_header("Content-Type")
    print req.get_header("Content-Type")
    ethsol
        3
    ethsol  
    OP
       Oct 12, 2016
    @shadowmydx 可以了,但是为什么要额外加 req.headers = h
    ethsol
        4
    ethsol  
    OP
       Oct 12, 2016
    @upczww 很好 requests 更简洁
    ThinkCat
        5
    ThinkCat  
       Oct 12, 2016
    你应该用下 requests , 这个真心好用
    ryd994
        6
    ryd994  
       Oct 12, 2016 via Android
    因为 HTTP 协议本来就规定 header 不分大小写: https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
    ubear1991
        7
    ubear1991  
       Oct 12, 2016
    用 requests
    TKKONE
        8
    TKKONE  
    PRO
       Oct 12, 2016
    看到那么多人推荐 requests ,我就放心了。
    还是用 requests 吧,妥妥的
    ethsol
        9
    ethsol  
    OP
       Oct 12, 2016
    已用 requests ,妥妥的
    jixiangqd
        10
    jixiangqd  
       Oct 12, 2016
    试过 requests 并发性能不是很好。。。不知道为什么
    qweweretrt515
        11
    qweweretrt515  
       Oct 12, 2016
    requests 啊
    sherwinkoo
        12
    sherwinkoo  
       Oct 12, 2016
    @jixiangqd 你怎么测试的?
    jixiangqd
        13
    jixiangqd  
       Oct 12, 2016
    @sherwinkoo 试过自带进程池、线程池模块、 gevent 协程:都是 urllib2 性能最好,差的还不是一点半点。不知道是不是有什么配置可以改进并发性能,没有深入研究
    purrgil
        14
    purrgil  
       Oct 13, 2016
    life is short,you neet requests
    purrgil
        15
    purrgil  
       Oct 13, 2016
    Life is short,you need requests.
    ibigbug
        16
    ibigbug  
       Oct 13, 2016
    rfc 是规定 http header 不区分大小写的,你可能无语错地方了
    shadowmydx
        17
    shadowmydx  
       Oct 13, 2016
    @zong400 因为 urlib2 在构建 Request 对象时对你传入的参数进行了统一的处理,其中,处理 header 后,将其赋予一个成员变量 headers 。因此,你只需要重新替换掉这个成员就可以了。
    chy373180
        18
    chy373180  
       Oct 13, 2016
    requests 何来的并发性能不是很好。。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2981 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 56ms · UTC 04:37 · PVG 12:37 · LAX 21:37 · JFK 00:37
    ♥ Do have faith in what you're doing.