requests 官方文档:html
http://cn.python-requests.org/zh_CN/latest/user/quickstart.htmlpython
request 是一个第三方的HTTP库json
1.发起请求浏览器
发起GET请求很是简单,直接使用requests的get方法便可。比方说下面的代码获取百度首页的信息。服务器
1 import requests 2 3 baidu_url = 'https://www.baidu.com' 4 5 response = requests.get(baidu_url) 6 print(response.content.decode())
1 #基本Get请求 2 r = requests.get('http://httpbin.org/get') 3 #若是要加参数,能够利用params参数 4 payload = {'key1':'values','key2':'valus'} 5 r = requests.get('http://httpbin.org/get',params=payload) 6 print r.url
其余经常使用的HTTP操做例如PUT、DELETE、HEAD、OPTIONS等也支持,调用相应方法便可。cookie
发起请求以后,返回值是一个Response对象,利用它咱们能够方便的获取结果。数据结构
响应对象的经常使用属性和方法以下。app
属性名 | 结果 |
---|---|
text | HTTP字符 |
encoding | 响应编码,这个值能够改变,改变以后text属性也会根据编码而变化 |
content | 未编码的二进制数据 |
json() | 返回JSON数据 |
raw | 结果的原始字节流 |
url | 请求的URL |
status_code | 状态码 |
headers | 请求头字典 |
cookies | cookies字典 |
history | 若是发生重定向,全部请求对象都会保存到这里 |
若是要在请求上添加请求头,也很是简单。有些网站对客户端的限制比较严格,因此咱们必须假装header。post
1 #若是想添加headers 能够传入headers参数 2 headers = {'content-type':'application/jason'} 3 r = requests.get('http://httpbin.org/get',headers = headers) 4 print r.url
假如使用自带的urllib标准库,那么代码就比较复杂了。从这里咱们能够看到requests确实很是方便。网站
headers = {'content-type':'application/jason'} r = urllib2.request(url,headers = headers) response = urllib2.urlopen(r) print response.read().decode()
若是咱们要发送复杂的表单,就须要POST数据了。和GET传送数据同样,想方法中额外添加一个data参数的事儿。这种方式至关于你在表单中填写这些数据,而后点击表单的提交。
data = { 'name': 'yitian', 'age': 22, 'friends': ['zhang3', 'li4'] } response = requests.post(f'{base_url}post', data=data) print(response.text)
有时候POST数据不是使用表单方式,而是直接在请求体中附加参数。那么咱们在发送参数的时候不能向data参数添加字典了,而应该传递字符串。
import json data = { 'name': 'yitian', 'age': 22, 'friends': ['zhang3', 'li4'] } response = requests.post(f'{base_url}post', data=json.dumps(data)) print(response.text)
备注: json的几个经常使用方法 json.load(), json.dump() ,json.loads(), json.dumps()
json.loads() : 将json结构转变成Python数据结构
json.dumps():将Python数据结构转变成json结构
json.load(): 读取json文件转成Python数据结构
json.dumps():写入jason文件
参考自: https://python3-cookbook.readthedocs.io/zh_CN/latest/c06/p02_read-write_json_data.html
有些程序(例如Github的API)须要将JSON字符串直接当作请求体发送,好比说上面这种将字典转换为JSON的例子。在这种状况下,咱们能够直接将字典的引用传递给方法的json参数,这样就不须要咱们手动转换,requests会自动转换。
response = requests.post(f'{base_url}post', json=data)
上传文件
在网页上,上传头像等操做都须要上传multipart/form-data类型的表单。使用requests也很是简单。须要注意打开文件的时候最好使用二进制模式,使用文本模式打开文件可能致使requests不能正确计算文件的大小。
file = open(r'c:\Windows\System32\drivers\etc\hosts', mode='rb') data = { 'file': file } response = requests.post(f'{base_url}post', files=data) print(response.text)
#requests 支持流失上传的,容许发送大的数据流或文件而无需先把他读入内存。需使用流式上传
with open('massive-body') as f: requests.post('http://some.url/streamed',data=f)
若是要获取响应的cookies,调用cookies属性便可,它会返回一个RequestsCookieJar
对象,它实现了标准库的http.cookiejar。因此咱们能够按照cookiejar的方法来使用RequestsCookieJar
。好比说访问百度的时候,它会分配一个cookie,因此咱们可使用下面的代码获取Cookie。
response = requests.get(baidu_url) print(response.cookies)
若是要在发送数据的时候向服务器传递cookie,须要实例化一个RequestsCookieJar,而后传递给发送方法的cookies参数。
import requests.cookies cookies = requests.cookies.RequestsCookieJar() cookies.set('name', 'yitian') response = requests.get(f'{base_url}cookies', cookies=cookies) print(response.text)
以上就是requests的快速入门。具体的高级应用能够参考官方文档。