requests的官方文档:http://cn.python-requests.org/zh_CN/latest/
requests是一个处理http请求的第三方库,所以,要了解requests的用法,需要先了解http协议,了解http协议的方法请出门右转。
看一下requests支持的web特性,根据运用过程中的需要去查看requests的官方文档或者搜索吧。
requests支持的web特性
- Keep-Alive & 连接池
- 国际化域名和 URL
- 带持久 Cookie 的会话
- 浏览器式的 SSL 认证
- 自动内容解码
- 基本/摘要式的身份认证
- 优雅的 key/value Cookie
- 自动解压
- Unicode 响应体
- HTTP(S) 代理支持
- 文件分块上传
- 流下载
- 连接超时
- 分块请求
- 支持 .netrc
requests发送请求
使用requests发送网络请求非常简单,发送请求方式与HTTP类型相关。
示例接口地址:https://developer.github.com/v3/
http://httpbin.org/
GET请求
1、不传递参数的get请求
import requests
r = requests.get('http://httpbin.org/get')
print(r.status_code)
2、传递参数的get请求
import requests
payload = {'key1': 'hello', 'key2': 'world'}
r = requests.get('http://httpbin.org/get', params=payload)
print(r.url)
print(r.text)
http://httpbin.org/get?key1=hello&key2=world
{
"args": {
"key1": "hello",
"key2": "world"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection": "close",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.18.4"
},
"origin": "",
"url": "http://httpbin.org/get?key1=hello&key2=world"
}
POST请求
post向服务器提交数据有4中常见的方式,application/x-www-form-urlencoded
、multipart/form-data
、application/json
、text/xml
。
提交数据的方式在headers的Content-Type
中进行设定。
1、提交json格式的数据
import requests
headers = {"Content-Type": "application/json"}
payload = {'key1': 'hello', 'key2': 'world'}
r = requests.post('http://httpbin.org/post', data=payload, headers=headers)
print(r.url)
print(r.text)
2、POST上传文件
import requests
files = {'file': open('interface_url.xlsx', 'rb')}
r = requests.post('http://httpbin.org/post', files=files)
print(r.text)
{
"args": {},
"data": "",
"files": {
"file": "data:application/octet-stream;base64,0M8R4KGxGuEAAAAAAAAAAAAAAA....
},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection": "close",
"Content-Length": "9882",
"Content-Type": "multipart/form-data; boundary=098bbe53c9ff4bd6a58653e2e9c15a10",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.18.4"
},
...
}
PUT\DELETE\PATCH请求
请求格式与post一样。
requests中请求的响应类型
- r.text:响应内容的格式与r.encoding的编码有关
- r.content:二进制响应内容
- r.json():json格式的响应内容
- r.raw:原始响应内容,需要在发送请求时,设置stream=True
import requests
username = 'catleer'
url = 'https://api.github.com'
path = '/users/' + username
r = requests.get(url+path, stream=True)
print(r.url)
print(r.status_code)
print(r.encoding)
print("响应内容:", r.text)
print("二进制响应内容:", r.content)
print("json格式的响应内容:", r.json())
print("原始响应内容:", r.raw)
print(r.raw.read(100))
with open("11.txt", 'wb') as fd:
c = 1
for chunk in r.iter_content(100):
fd.write(chunk)
c = c + 1
print(c)