Hi,看这!!!博主的微信是qing_an_an,公众号是Sea_Cha,欢迎一起入坑。
前面一篇我们讲了接口测试的理论加JSON的基本运用,,目前来说还是比较的简单的。这一篇的基础篇也还算简单,我们一起来看看吧。
接口理论+JSON基础
目录
介绍
安装requests
requests常用方法
基础操作
GET请求
POST请求
TEXT与JSON的比较
图片类型
介绍
requests是一个python的库,通过简单的api实现python对http请求的操作,多用于爬虫或者接口测试。
requests库是用python编写的,基于urllib库做的二次封装,采用Apache2 Licensed开源协 议的HTTP库;相比urllib库,requests库更加方便,可以节约我们大量的工作,完全满足 HTTP测试需求。
requests支持HTTP连接保持(keep-alive)和连接池,支持使用cookie保持会话,支持文 件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。
文字游戏介绍到这。我看直接看正文!!!
安装requests
两种方式:
1、requests -i https://pypi.douban.com/simple
验证是否安装成功pip show requests
2、直接在pycharm里面导入import requests,把鼠标移到上面去,点击install自己会下载
requests常用方法
这里就一笔全部带过了!!!
1. requests.get('https://www.baidu.com/get') #GET请求
2. requests.post('https://www.baidu.com/post') #POST请求
3. requests.put('https://www.baidu.com//put') #PUT请求(提交修改全部的数据)
4. requests.delete('https://www.baidu.com/delete') #DELETE请求
5. requests.requests(method,url, **kwargs) 以上方法都可以由requests()方法实现的,因此我 们也可以说requests()方法是最基本的
这里也就是各种请求的运用,我们接下来一一看例题。
基础操作
import requests
res = requests.get(url='https://baidu.com')
print("url",res.url)
print("状态码:",res.status_code)
print("文本响应内容",res.text)
print("默认编码格式",res.encoding)
# 修改编码格式
res.encoding='utf-8'
print("修改后的编码格式",res.encoding)
GET请求
在get请求后面加入数字与汉字
import requests
url='https://baidu.com'
res = requests.get(url,params='id=11001')
print(res.url)
输出的结果是http://www.baidu.com/?id=1001,也有另一种接入方法:
import requests
url='https://baidu.com'
data = {'id':1001}
res = requests.get(url,data)
print(res.url)
你也可以接入多个参数,混合起来发送请求:
import requests
url='https://baidu.com'
data = {'id':'1001,1002','home':'深圳'}
res = requests.get(url,data)
print(res.url)
我们得到的是这样的一个地址:http://www.baidu.com/?id=1001%2C1002&home=%E6%B7%B1%E5%9C%B3,home后面我们接的是深圳,但是看起来像是乱码了,其实不是乱码,我们只需要通过解析就能得到汉字,自行搜索UrlEncode进行解码就好。
除此之外我们还可以换另外一种的写法:
import requests
url='https://baidu.com'
data = {'id':'1001,1002','home':'深圳'}
res = requests.request('GET',url,params=data)
print(res.url)
POST请求
import requests
import json
url = 'http://api.test.zhulogic.com/designer_api/account/login_quick'
# 字典类型,需要转换
d = {
"phone":1234568,
"code":1234,
"unionid":"",
"messageType":3,
"channel":"zhulogic"
}
# 1、将字典d转为json类型
json_d = json.dumps(d)
h = {'Content-Type':'application/json'}
res = requests.post(url,data=json_d,headers=h)
print(res.text)
这里可以换一种将字典转为JSON类型的写法,为什么一定要替换,因为不替换会有夜歌error的报错,具体是什么宝报错,可以自己试试。这里的转换就是:
res = requests.post(url,json=d,headers=h)
print(res.text)
亦或者直接干脆点跟get请求一样:
import requests
import json
url = 'http://api.test.zhulogic.com/designer_api/account/login_quick'
# 字典类型,需要转换
d = {
"phone":12345678,
"code":1234,
"unionid":"",
"messageType":3,
"channel":"zhulogic"
}
res = requests.request('POST',url,json=d,headers=h)
print("状态码:",res.status_code)
print(res.text)
这里我们想看到什么样的信息都可以打印,编码格式,请求的地址,响应的状态码等,都是可以的。
TEXT与JSON的比较
响应对象.json:返还类型字典,可以通过键名来获取响应的值
响应对象.text:返还类型为字符串,无法通过键名方式来获取响应的值
他们也有一个共同的特点就是长的比较像字典。但是取值的方式还是有明显的不一样的地方
import requests
import json
url = 'http://api.test.zhulogic.com/designer_api/account/login_quick'
d = {
"phone":12345678,
"code":1234,
"unionid":"",
"messageType":3,
"channel":"zhulogic"
}
h = {'Content-Type':'application/json'}
res = requests.request('POST',url,json=d,headers=h)
print(res.text)
print(res.json())
print(type(res.text)) # 字符串类型
print(type(res.json())) # 字典类型
# 取值比较
print("TEXT:",res.text[1:3]) # 切片,很不方便
print("JSON:",res.json()['message'])
这样就能很明显的看出两者的不一样了,看看结果:
{"status_code":400,"message":"请输入正确的手机号码","data":null}
{'status_code': 400, 'message': '请输入正确的手机号码', 'data': None}
<class 'str'>
<class 'dict'>
TEXT: "s
JSON: 请输入正确的手机号码
图片类型
这里就比较的特殊了。需要用到另一个方法content,我们直接访问百度的图片:https://www.baidu.com/img/flexible/logo/pc/result.png
import requests
import json
res = requests.get('https://www.baidu.com/img/flexible/logo/pc/result.png')
print(res.text)
这样访问出来的都是乱码,比如:�PNGTŵ��w��E !�� "Y�J�啥的,一堆乱码。但是你用了content就不一样了,可以解析成一堆字节码。
import requests
import json
res = requests.get('https://www.baidu.com/img/flexible/logo/pc/result.png')
print(res.content)
如果没复制错的话,解析出来就是这样的了。
b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xca\x00\x00\x00B\x08\x06\x00\x00\x00\x16\x86I\x1d\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x19\x93IDATx\x01\xed]\r|T\xc5\xb5
这样看着没个图片的样子,我们给保存一下。以二进制的方式保存在当前的目录下。
import requests
import json
res = requests.get('https://www.baidu.com/img/flexible/logo/pc/result.png')
with open('baidu.png','wb') as f:
f.write(res.content)