requests是一个简单的python 的http库.本文档整理了一些简单的用法。cookies,重定向,以及一些高级用法没有整理
安装
pip install requests
请求参数
参数 | 用途 | 备注 |
---|---|---|
params | get 请求传递参数 | 字典,字典的value为列表 |
data | post 请求传递参数 | 字典,元组列表,字典的value为列表 |
headers | 传递头信息,字典形式。类型为str ,字节字符串或unicode | |
json | post 请求使用,传递未编码的参数 | json如果传递了data或参数,则将忽略该参数files |
files | 上传多部分编码的文件 | |
timeout | 指定的秒数后停止等待响应 |
reques请求响应
r= requests.get('http://10.130.25.80:1122/get_test', params={'key_get': 'value_get'})
操作 | 含义 | 备注 |
---|---|---|
requests.get('http://10.130.25.80:1122/get_test') | 发起请求 | 同时也可发起其他类型的请求 |
r.url | request对象的URL | |
r.text | 展示响应内容,编码为请求根据头文件猜测的编码 | |
r.content | 展示响应内容,类型为字节类型,即二进制响应内容 | 一般是图像,文件的时候需要以这种方式拿响应内容 |
r.json() | 获取json响应内容 | 当响应内容不是json时,将有对应的报错ValueError: No JSON object could be decoded |
r.raw | 原始的字节流 | 仅记录,不知道获取的是什么数据,没有测试出来 |
r.encoding | 查询正在使用的编码 | 修改编码可使用r.encoding='utf-8' |
r.status_code | 返回状态码 | |
r.headers | 查看服务器的响应headers | 格式为字典,可通过key获取value的值 |
r.request.hearder | 查看客户端发送为服务器的header | |
r.cookies | 获取cookies | Cookie以RequestsCookieJar 的形式返回 |
案例:
发起请求
r_get = requests.get('http://10.130.25.80:1122/get_test')
发起带参数的请求
带参数的get请求
如: 请求为:http://10.130.25.80:1122/get_test?key_get=value_get
r_get = requests.get('http://10.130.25.80:1122/get_test', params={'key_get': 'value_get'})
print(r_get.url)
请求结果:
http://10.130.25.80:1122/get_test?key_get=value_get
也可以以列表形式传递参数的值
请求:http://10.130.25.80:1122/get_test?key_get=value_get&key_get_list_2=value_list_0&key_get_list_2=value_list_1
r_get1 = requests.get('http://10.130.25.80:1122/get_test', params={'key_get': 'value_get','key_get_list_2': ['value_list_0', 'value_list_1']})
print(r_get1.url)
带参数的post请求
data传递参数,字典类型
r_post = requests.post('http://10.130.25.80:1122/qnWebCallBack', data={'key': 'value'})
print(r_post.url)
print(r_post.text)
data传递参数,参数为元组列表或字典的value为列表
body为: key=value&key=value2
#data为元组列表
r_post = requests.post('http://10.130.25.80:1122/qnWebCallBack', data=[('key', 'value'), ('key', 'value2')])
print(r_post.url)
print(r_post.text)
#data的字典的value为列表
r_post_1 = requests.post('http://10.130.25.80:1122/qnWebCallBack', data={'key': ['value','value2']})
print(r_post.url)
print(r_post.text)
传递未编码的数据
# json 发送未经格式编码的数据
r_post = requests.post('http://10.130.25.80:1122/qnWebCallBack', json={'key': 'value'})
print(r_post.url)
print(r_post.text)
# print(r_post.headers)
# 转化为json
data = {'key': 'value'}
r_post_1 = requests.post('http://localhost:1122/qnWebCallBack', data=json.dumps(data))
print(r_post_1.url)
print(r_post_1.text)
传递多部分编码的文件
- 传递一个文件
#传递一个文件
r_post = requests.post('http://localhost:1122/test', files={'file': ('sql.txt',open('sql.txt', 'rb'))})
print(r_post.text)
响应
--dfcfda2909a3f1f77b16e1ba3f4621db
Content-Disposition: form-data; name="file"; filename="sql.txt"
select * from mysql
--dfcfda2909a3f1f77b16e1ba3f4621db--
- 传递一个文件,显示声明header
#传递一个文件,显示声明header
r_post = requests.post('http://localhost:1122/test', files={'file': ('sql.txt',open('sql.txt', 'rb',), 'application/json;charset=utf-8')})
print(r_post.text)
响应
--71833f4808a013a3253b578dae8d03c5
Content-Disposition: form-data; name="file"; filename="sql.txt"
Content-Type: application/json;charset=utf-8
select * from mysql
--71833f4808a013a3253b578dae8d03c5--
- 传递一个文件,传递字符串作为文件接收
#传递一个文件,传递字符串作为文件接收
r_post = requests.post('http://localhost:1122/test', files={'file': ('sql.txt', 'I am string')})
print(r_post.text)
响应
--52ef8094b133915b17d9ebc748f40ff6
Content-Disposition: form-data; name="file"; filename="sql.txt"
I am string
--52ef8094b133915b17d9ebc748f40ff6--
查看响应内容
r_get = requests.get('http://10.130.25.80:1122/get_test', params={'key_get': 'value_get'})
print(r_get.text)
print(r_get.content)
print(r_get.json())
响应:
接收成功,数据为:
b'\xe6\x8e\xa5\xe6\x94\xb6\xe6\x88\x90\xe5\x8a\x9f\xef\xbc\x8c\xe6\x95\xb0\xe6\x8d\xae\xe4\xb8\xba\xef\xbc\x9a'
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
text
根据猜想的编码显示,显示的是文本内容content
显示的响应为字节类型的,也就是二进制json()
获取json响应内容
查看响应状态码
r_get = requests.get('http://10.130.25.80:1122/get_test', params={'key_get': 'value_get'})
print(r_get.status_code)
响应:
200
查看服务的header
r_post = requests.post('http://localhost:1122/test', files={'file': ('sql.txt',open('sql.txt', 'rb',), 'application/json;charset=utf-8')})
# 获取headers
print(r_post.headers)
# 根据key获取deaders
print(r_post.headers['Content-Type'])
print(r_post.headers.get("Content-Type"))
响应
{'Date': 'Wed, 03 Feb 2021 08:49:41 GMT', 'Server': 'WSGIServer/0.2 CPython/3.8.4', 'Content-Type': 'text/html; charset=UTF-8'}
text/html; charset=UTF-8
text/html; charset=UTF-8
获取cookies
r_get = requests.get('http://10.130.25.120:7001/dcms')
print(r_get.cookies)
响应
<RequestsCookieJar[<Cookie JSESSIONID=kpNKghshJJBsJLTpqGpP4W7pTL6DfPNtQTVHTkhSJ2mw5StQC2Pv!1963428134 for 10.130.25.120/>]>
超时
#服务器,延迟2秒返回结果
@route('/test', method='get')
def qnWebCallBack():
print(type(request.body))
time.sleep(2)
return request.body
#客户端,仅等待1s
# 测试延时返回
r_get = requests.get('http://localhost:1122/test',timeout=1)
响应
socket.timeout: timed out
raise ReadTimeoutError(
urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='localhost', port=1122): Read timed out. (read timeout=1)
requests.exceptions.ReadTimeout: HTTPConnectionPool(host='localhost', port=1122): Read timed out. (read timeout=1)
参考链接:
https://www.cnblogs.com/zhangxinqi/p/9201594.html
https://3.python-requests.org/user/quickstart/