python Requests
2016-03-15 14:43
363 查看
环境:python3
接口地址:http://httpbin.org/
目的:做接口测试使用,这里记录一下常用的操作,相对于urllib,个人觉得更喜欢这个第三方包
1.安装requests
方法1:pip install requests
方法2:下载源码=》解压=》进入解压后的文件内=》python setup.py install
2.发送不带参数的请求
3.发送带参数的请求
3.定制请求头
4.响应内容
解析1:>>>r.text
Requests会自动解码来自服务器的内容,大多数unicode字符串都能被无缝的解码。
请求发出后,Requests会基于HTTP头部对响应的编码做出有根据的推测,当你访问r.text的时候,Requests会使用其推测的文本编码。你可以找道Requests使用了什么编码,并且能够使用r.encoding属性来改变
解析2:>>>r.content
你能以字节的方式访问请求响应体,Requests会自动为你解码gzip和deflate传输编码的响应数据
解析3:>>>r.json()
Requests中也有一个内置的json解码器,助你处理json数据
json原本是一个str类型的数据,经过json解码器的处理转换为python类型的数据,也就是dict
如果json解码失败,r.json就会抛出一个异常。(Unauthorized)
解析4:>>>r.iter_content(chunk_size)
如果你可能想要获取来自服务器的原始套接字响应,那么你可以访问r.raw.如果你确实要这么干,那么请你确保在初始请求中设置了stream=True
但一般情况下,你应该下面的模式将文本流保存到文件:
使用 Response.iter_content 将会处理大量你直接使用 Response.raw 不得不处理的。 当流下载时,上面是优先推荐的获取内容方式。
5.获取状态码
6.获取响应的header
7.超时
你可以告诉Requests在经过以timeout参数设定的秒数时间之后停止等待响应
timeout仅仅对链接过程有效,与响应体的下载无关
8.cookies
接口地址:http://httpbin.org/
目的:做接口测试使用,这里记录一下常用的操作,相对于urllib,个人觉得更喜欢这个第三方包
1.安装requests
方法1:pip install requests
方法2:下载源码=》解压=》进入解压后的文件内=》python setup.py install
2.发送不带参数的请求
r = requests.get("your url") #发送get请求 r = requests.post("your url") #发送post请求 r = requests.put("your url") #发送put请求 r = requests.delete("your url") #发送delete请求 r = requests.options("your url") #发送options请求
3.发送带参数的请求
#get请求带参数 payload = {'key1': 'value1', 'key2': 'value2', 'key3':None} #值为None的参数不会被构造进url中 r = requests.get("http://httpbin.org/get", params=payload) print(r.url) #结果如下: #http://httpbin.org/get?key2=value2&key1=value1 #get请求带参数 payload = {'key1': 'value1', 'key2': 'value2', 'key3':""} #值为空字符串会被构造进url中 r = requests.get("http://httpbin.org/get", params=payload) print(r.url) #结果如下 #http://httpbin.org/get?key3=&key2=value2&key1=value1 #post请求带参数 #要实现post带参数请求,只是需要简单的传递一个字典给data参数。你的数据字典在发出请求的时候会自动编码为表单形式 r = requests.post("http://httpbin.org/get", data=payload) #post请求带参数 #如果有时候你想要发送出去的数据并非编码为表单形式,如果你传递一个string而不是一个dict,那么数据会被直接发布出去 >>> import json >>> url = 'https://api.github.com/some/endpoint' >>> payload = {'some': 'data'} >>> r = requests.post(url, data=json.dumps(payload))
3.定制请求头
>>> import json >>> url = 'https://api.github.com/some/endpoint' >>> payload = {'some': 'data'} >>> headers = {'content-type': 'application/json'} >>> r = requests.post(url, data=json.dumps(payload), headers=headers)
4.响应内容
import requests payload = {'key1': 'value1', 'key2': 'value2', 'key3':""} r = requests.post("http://httpbin.org/get", data=payload) filename = "de.txt" chunk_size = 1024 #响应内容 print(r.text) #二进制响应内容 print(r.content) #json响应内容 print(r.json()) #原始响应内容-生成器(节约内存);注意这里应该在发送请求的时候加一个参数:stream=True r = requests.post("http://httpbin.org/get", data=payload,stream=True) with open(filename, "wb") as fd: for chunk in r.iter_content(chunk_size): fd.write(chunk)
解析1:>>>r.text
Requests会自动解码来自服务器的内容,大多数unicode字符串都能被无缝的解码。
请求发出后,Requests会基于HTTP头部对响应的编码做出有根据的推测,当你访问r.text的时候,Requests会使用其推测的文本编码。你可以找道Requests使用了什么编码,并且能够使用r.encoding属性来改变
#查看Requests使用了什么编码来进行解码 print(r.encoding)
解析2:>>>r.content
你能以字节的方式访问请求响应体,Requests会自动为你解码gzip和deflate传输编码的响应数据
>>> r.content b'[{"repository":{"open_issues":0,"url":"https://github.com/...
解析3:>>>r.json()
Requests中也有一个内置的json解码器,助你处理json数据
json原本是一个str类型的数据,经过json解码器的处理转换为python类型的数据,也就是dict
如果json解码失败,r.json就会抛出一个异常。(Unauthorized)
解析4:>>>r.iter_content(chunk_size)
如果你可能想要获取来自服务器的原始套接字响应,那么你可以访问r.raw.如果你确实要这么干,那么请你确保在初始请求中设置了stream=True
>>> r = requests.get('https://github.com/timeline.json', stream=True) >>> r.raw <requests.packages.urllib3.response.HTTPResponse object at 0x101194810> >>> r.raw.read(10) '\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03'
但一般情况下,你应该下面的模式将文本流保存到文件:
with open(filename, 'wb') as fd: for chunk in r.iter_content(chunk_size): fd.write(chunk)
使用 Response.iter_content 将会处理大量你直接使用 Response.raw 不得不处理的。 当流下载时,上面是优先推荐的获取内容方式。
5.获取状态码
import requests r = requests.get("http://httpbin.org/ip") #响应状态码 print(r.status_code) #Requests还附带了一个内置的状态码查询对象 print(requests.codes.ok)
6.获取响应的header
import requests r = requests.get("http://httpbin.org/ip") print(r.headers) print(type(r.headers)) #以字典的形式返回 print(r.headers["Content-Type"]) #根据字典的获取内容形式进行获取 print(r.headers.get("Content-Type"))
7.超时
你可以告诉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 timed out. (timeout=0.001)
timeout仅仅对链接过程有效,与响应体的下载无关
8.cookies
>>> url = 'http://example.com/some/cookie/setting/url' >>> r = requests.get(url) >>> r.cookies['example_cookie_name'] 'example_cookie_value'
相关文章推荐
- python中requests模块的使用方法
- Python3使用requests包抓取并保存网页源码的方法
- Python网页爬虫学习
- Jmeter+Ant+Jenkins搭建持续集成的接口测试框架
- ImportError: No module named 'requests'
- 可以参考《SpringMVC接口测试异常:Can not deserialize instance
- Python3使用requests包抓取并保存网页源码的方法
- 学习Requests-快速上手
- thinkphp 集成 Requests for PHP ,实现curl 操作.
- Requests 使用 钩子 实现文件上传到其他服务器
- requests模块,参数值为None的键无法添加到URL中
- axis2开发webservice接口入门到精通详解
- axis2开发webservice接口入门到精通详解
- [模拟登陆三剑客]2. 使用Fiddler 分析数据包
- 关于requests的session方法保持cookie的问题。
- 用requests和beautifulsoup爬取豆瓣电影top250,代码及遇到的问题
- 白盒测试——私有接口测试
- 接口测试数据管理
- Python及requests乱码问题的总结
- 基于HttpClient Jar包封装Java方法实现接口测试