![v2-20866a28ec9d9ab94481eaa82e44b6ca_1440w.jpg?source=172ae18b](http://img-03.proxy.5ce.com/view/image?&type=2&guid=1d981be4-792f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-20866a28ec9d9ab94481eaa82e44b6ca_1440w.jpg?source=172ae18b)
安装:
pip install requests
例子:
import requests
r = requests.get('http://www.baidu.com')
print r.status_code
print type(r)
print r.cookies运行程序,得到结果:
运行程序,得到结果:
200
<class 'requests.models.Response'>
<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
常用的HTTP请求类型
>>> r = requests.post('http://httpbin.org/post', data = {'key':'value'})
>>> r = requests.put('http://httpbin.org/put', data = {'key':'value'})
>>> r = requests.delete('http://httpbin.org/delete')
>>> r = requests.head('http://httpbin.org/get')
>>> r = requests.options('http://httpbin.org/get')
GET:
![v2-868abb32c13fe4a2d2d05ad9edd51a68_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=1d981be4-792f-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-868abb32c13fe4a2d2d05ad9edd51a68_b.jpg)
![v2-ee3a1b11df4877ae1b4e931094b1f1a0_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=1d981be4-792f-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-ee3a1b11df4877ae1b4e931094b1f1a0_b.jpg)
POST:
![v2-d8ba8fc65bf07fb077ac46a02dc2ffc7_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=1d981be4-792f-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-d8ba8fc65bf07fb077ac46a02dc2ffc7_b.jpg)
API:
![v2-c4d74e02c3b86b7eb7d6bb491e41cb13_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=1d981be4-792f-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-c4d74e02c3b86b7eb7d6bb491e41cb13_b.jpg)
request库的返回内容
![v2-991d6c0cc525a25a6849f2f4fd79d9f6_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=1d981be4-792f-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-991d6c0cc525a25a6849f2f4fd79d9f6_b.jpg)
返回响应对象
# r.text 当你访问 r.text 之时,Requests 会使用其推测的文本编码
>>> import requests
>>> r = requests.get('https://api.github.com/events')
>>> r.text
u'[{"repository":{"open_issues":0,"url":"https://github.com/...
你可以找出 Requests 使用了什么编码,并且能够使用r.encoding 属性来改变它:
# r.encoding
>>> r.encoding
'utf-8'
>>> r.encoding = 'ISO-8859-1'
二进制响应内容
# 以字节的方式访问请求响应体
>>> r.content
b'[{"repository":{"open_issues":0,"url":"https://github.com/...
Json响应内容
# r.json JSON 解码失败, r.json() 就会抛出一个异常
>>> import requests
>>> r = requests.get('https://api.github.com/events')
>>> r.json()
[{u'repository': {u'open_issues': 0, u'url': 'https://github.com/...
Raw原始响应内容
# Note:确保在初始请求中设置了 stream=True
>>> r = requests.get('https://api.github.com/events', stream=True)
>>> r.raw
<requests.packages.urllib3.response.HTTPResponse object at 0x101194810>
>>> r.raw.read(10)
'x1fx8bx08x00x00x00x00x00x00x03'
Header
>>> url = 'https://api.github.com/some/endpoint'
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> headers = {'user-agent': 'my-app/0.0.1'}
>>> r = requests.get(url, params=payload, headers=headers)
响应状态码:
>>> r = requests.get('http://httpbin.org/get')
>>> r.status_code
200
# 内置的状态码查询对象
>>> r.status_code == requests.codes.ok
True
# 发送错误的请求时候,Response.raise_for_status() 来抛出异常
>>> bad_r = requests.get('http://httpbin.org/status/404')
>>> bad_r.status_code
404
>>> bad_r.raise_for_status()
Traceback (most recent call last):
File "requests/models.py", line 832, in raise_for_status
raise http_error
requests.exceptions.HTTPError: 404 Client Error
# 当status_code为200的时候
>>> r.raise_for_status()
None
Cookie:
>>> url = 'http://example.com/some/cookie/setting/url'
>>> r = requests.get(url)
>>> r.cookies['example_cookie_name']
'example_cookie_value'
# 发送cookie到服务器
>>> url = 'http://httpbin.org/cookies'
>>> cookies = dict(cookies_are='working')
>>> r = requests.get(url, cookies=cookies)
>>> r.text
'{"cookies": {"cookies_are": "working"}}'
POST请求例子
传递参数方法:
import requests
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("http://httpbin.org/post", data=payload)
print r.text
结果:
{
"args": {},
"data": "",
"files": {},
"form": {
"key1": "value1",
"key2": "value2"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "23",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.9.1"
},
"json": null,
"url": "http://httpbin.org/post"
}
把Json格式的数据传过去
import json
import requests
url = 'http://httpbin.org/post'
payload = {'some': 'data'}
r = requests.post(url, data=json.dumps(payload))
print r.text
结果:
{
"args": {},
"data": "{"some": "data"}",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "16",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.9.1"
},
"json": {
"some": "data"
},
"url": "http://httpbin.org/post"
}
如何上传一个文件呢?,新建一个txt文件,内容为:Hello Word!
import requests
url = 'http://httpbin.org/post'
files = {'file': open('test.txt', 'rb')}
r = requests.post(url, files=files)
print r.text
运行结果:
{
"args": {},
"data": "",
"files": {
"file": "Hello World!"
},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "156",
"Content-Type": "multipart/form-data; boundary=7d8eb5ff99a04c11bb3e862ce78d7000",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.9.1"
},
"json": null,
"url": "http://httpbin.org/post"
}
文件就上传成功了
另外一种流上传方式:
with open('massive-body') as f:
requests.post('http://some.url/streamed', data=f)超时:
超时:
# requests 在经过以 timeout 参数设定的秒数时间之后停止等待响应
>>> requests.get('http://github.com', timeout=0.001)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
requests.exceptions.Timeout: HTTPConnectionPool(host='github.com', port=80): Request