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

2014-02-10 16:32:42 +08:00
 FatGhosta
想从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
```
肿么回事。。。
9456 次点击
所在节点    Python
14 条回复
zoowii
2014-02-10 16:42:20 +08:00
建议用requests库
FatGhosta
2014-02-10 16:47:28 +08:00
@zoowii 嗯!我也看到这个库了。但是我就是想知道,httplib那个代码到底错在哪里了。。。不弄清楚了难受,你懂的。。。
menqiandenanmu
2014-02-10 17:20:53 +08:00
楼主处女座的啊
FatGhosta
2014-02-10 17:22:55 +08:00
@menqiandenanmu 虽然太阳星座是摩羯!!但是月亮星座是处女!!求别黑!!
zxc111
2014-02-10 17:24:36 +08:00
写法错了。
1.httplib 第一步不要带 "http://"
2.对于 https 协议请用 httplib.HTTPSConnection

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

urllib 也是依靠 httplib实现的
Veelian
2014-02-10 17:25:15 +08:00
https端口默认是443吧
robinlovemaggie
2014-02-10 17:29:39 +08:00
@FatGhosta 据我所知,httplib对于https是无力的,所以楼主还是不要再难受了……
http://docs.python.org/2/library/httplib.html
FatGhosta
2014-02-10 17:30:18 +08:00
@zxc111 谢谢!!!
lehui99
2014-02-10 17:32:49 +08:00
python的urllib相当于java.net.URL,支持各种url的,不仅是http/https,一般使用urllib而不是直接用httplib
cute
2014-02-10 17:37:23 +08:00
httpClient = httplib.HTTPSConnection('api.github.com', 443)
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
2014-02-10 18:21:05 +08:00
@FatGhosta https和http协议不同。httplib太基础了,httplib.HTTPConnection打开https地址当然报错。后面没看
est
2014-02-10 21:05:59 +08:00
httplib 是处理HTTP协议的。

urllib 还可以处理一些其他网址,比如 ftp://,file://,但是用的不多。
mugongjian
2014-02-11 17:07:43 +08:00
urllib 包含处理url的函数:quote,unquote,splitattr,splithost...
我想这才是urllib这个名字的来历,
但是这个模块还包含一个通用的urlopen的函数,加上多数人用它来请求http,所有才会对httplib 和urllib 的关系模糊.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/99582

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX