在python中有两种方式可以发送http请求:
- 通过python自带的urllib模块,不需要安装,直接from urllib import request,直接使用request对象做Http请求的发送。
- 通过第三方的requests模块,需要pip install安装(推荐,因为API人性化)
urllib and urllib2 区别
urllib和urllib2模块都做与请求URL相关的操作,但他们提供不同的功能。
urllib2.urlopen accepts an instance of the Request class or a url, (whereas urllib.urlopen only accepts a url 中文意思就是:urllib2.urlopen可以接受一个Request对象或者url,(在接受Request对象时候,并以此可以来设置一个URL 的headers),urllib.urlopen只接收一个url
urllib 有urlencode,urllib2没有,这也是为什么总是urllib,urllib2常会一起使用的原因
r = Request(url=‘http://www.mysite.com‘)
r.add_header(‘User-Agent‘, ‘awesome fetcher‘)
r.add_data(urllib.urlencode({‘foo‘: ‘bar‘})
response = urllib2.urlopen(r) #post method
urllib 模块
I. urlencode不能直接处理unicode对象,所以如果是unicode,需要先编码,有unicode转到utf8,举例:
urllib.urlencode (u‘bl‘.encode(‘utf-8‘))
II. 示例
import urllib #sohu 手机主页
url = ‘http://m.sohu.com/?v=3&_once_=000025_v2tov3&_smuid= ICvXXapq5EfTpQTVq6Tpz‘
resp = urllib.urlopen(url)
page = resp.read()
f = open(‘./urllib_index.html‘, ‘w‘)
f.write(page)
print dir(resp)
结果:
[‘doc‘, ‘init‘, ‘iter‘, ‘module‘, ‘repr‘, ‘close‘, ‘code‘, ‘fileno‘, ‘fp‘, ‘getcode‘, ‘geturl‘, ‘headers‘, ‘info‘, ‘next‘, ‘read‘, ‘readline‘, ‘readlines‘, ‘url‘]
print resp.getcode(), resp.geturl(), resp.info(), resp.headers, resp.url
#resp.url和resp.geturl()结果一样
III. 编解码示例 urllib.quote和urllib.urlencode都是编码,但用法不一样
48 s = urllib.quote(‘This is python‘) #编码 49 print ‘quote:\t‘+s #空格用%20替代 50 s_un = urllib.unquote(s) #解码 51 print ‘unquote:\t‘+s_un 52 s_plus = urllib.quote_plus(‘This is python‘) #编码 53 print ‘quote_plus:\t‘+s_plus #空格用+替代 54 s_unplus = urllib.unquote_plus(s_plus) #解码 55 print ‘s_unplus:\t‘+s_unplus 56 s_dict = {‘name‘: ‘dkf‘, ‘pass‘: ‘1234‘} 57 s_encode = urllib.urlencode(s_dict) #编码字典转换成u