Python菜鸟提问,httplib和urllib2有什么区别?? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
FatGhosta
V2EX    Python

Python菜鸟提问,httplib和urllib2有什么区别??

  •  
  •   FatGhosta 2014-02-10 16:32:42 +08:00 10053 次点击
    这是一个创建于 4268 天前的主题,其中的信息可能已经有所发展或是发生改变。
    想从java转Python,Python看了一个特别简单的教程,就想先上手试试。结果就卡了。。。
    想调用github的OPEN API试试,搜了一下httpclient(显然java的名字,勿喷。。。),搜到了httplib。然后就照猫画虎写程序。见下。
    ```python
    #!/usr/bin/python
    #coding=utf8

    import httplib

    try:
    httpClient = httplib.HTTPConnection('https://api.github.com/', 80)
    headers = {"Content-type":"application/json"}
    param = None
    httpClient.request('GET','/', param, headers)
    respOnse= httpClient.getresponse()
    print response.status
    except Exception, e:
    print e
    finally:
    if httpClient:
    httpClient.close()
    ```

    然后运行完了报错[Errno 11004] getaddrinfo failed
    搜了很多,发现没有解决了的,只有改用urllib的。
    这个倒是成功了。。。
    ```python
    #!/usr/bin/python
    #coding=utf8

    import urllib2
    import json

    respOnse= urllib2.urlopen('https://api.github.com/')
    data = json.load(response)
    print data
    ```
    肿么回事。。。
    14 条回复    1970-01-01 08:00:00 +08:00
    zoowii
        1
    zoowii  
       2014-02-10 16:42:20 +08:00
    建议用requests库
    FatGhosta
        2
    FatGhosta  
    OP
       2014-02-10 16:47:28 +08:00
    @zoowii 嗯!我也看到这个库了。但是我就是想知道,httplib那个代码到底错在哪里了。。。不弄清楚了难受,你懂的。。。
    menqiandenanmu
        3
    menqiandenanmu  
       2014-02-10 17:20:53 +08:00
    楼主处女座的啊
    FatGhosta
        4
    FatGhosta  
    OP
       2014-02-10 17:22:55 +08:00
    @menqiandenanmu 虽然太阳星座是摩羯!!但是月亮星座是处女!!求别黑!!
    zxc111
        5
    zxc111  
       2014-02-10 17:24:36 +08:00   1
    写法错了。
    1.httplib 第一步不要带 "http://"
    2.对于 https 协议请用 httplib.HTTPSConnection

    相关例子请参见:
    http://stackoverflow.com/questions/2146383/https-connection-python

    urllib 也是依靠 httplib实现的
    Veelian
        6
    Veelian  
       2014-02-10 17:25:15 +08:00
    https端口默认是443吧
    robinlovemaggie
        7
    robinlovemaggie  
       2014-02-10 17:29:39 +08:00
    @FatGhosta 据我所知,httplib对于https是无力的,所以楼主还是不要再难受了……
    http://docs.python.org/2/library/httplib.html
    FatGhosta
        8
    FatGhosta  
    OP
       2014-02-10 17:30:18 +08:00
    @zxc111 谢谢!!!
    lehui99
        9
    lehui99  
       2014-02-10 17:32:49 +08:00 via Android
    python的urllib相当于java.net.URL,支持各种url的,不仅是http/https,一般使用urllib而不是直接用httplib
    cute
        10
    cute  
       2014-02-10 17:37:23 +08:00
    httpClient = httplib.HTTPSConnection('api.github.com', 443)
    sd4399340
        11
    sd4399340  
       2014-02-10 17:48:09 +08:00
    一个原因是:httplib.HTTPConnection()的第一个参数是host,不加http/https的,另外,你用浏览器试试就可以发现,http://api.github.com 是不能访问的,只有 https://api.github.com 才能访问,而https的端口是443,不是80,改成 httplib.HTTPConnection('api.github.com',443) 试试

    httplib比较底层,一般使用的话用urllib和urllib2即可
    zoowii
        12
    zoowii  
       2014-02-10 18:21:05 +08:00
    @FatGhosta https和http协议不同。httplib太基础了,httplib.HTTPConnection打开https地址当然报错。后面没看
    est
        13
    est  
       2014-02-10 21:05:59 +08:00
    httplib 是处理HTTP协议的。

    urllib 还可以处理一些其他网址,比如 ftp://,file://,但是用的不多。
    mugongjian
        14
    mugongjian  
       2014-02-11 17:07:43 +08:00
    urllib 包含处理url的函数:quote,unquote,splitattr,splithost...
    我想这才是urllib这个名字的来历,
    但是这个模块还包含一个通用的urlopen的函数,加上多数人用它来请求http,所有才会对httplib 和urllib 的关系模糊.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2587 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 07:59 PVG 15:59 LAX 00:59 JFK 03:59
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86