一、requests库简介
用于发送合同谈判请求的第三方库,安装:pip install requests
二、requests库常用的方法
1.requests.get(url, params=None, **kwargs) 发送get请求(通过params传
参)
2.requests.post(url, data=None, json=None, **kwargs) 发送post请求(通过data
和json传参)
请求头:
1.请求正文格式:multipart/formdata 文件上传
ContentType:multipart/formdata 一般用于传价值对和文件
2.请求正文格式:application/xwwwformurlencoded 键值对
ContentType:application/xwwwformurlencoded 以表单的方式传参,数据格式:
key1=value1&key2=value2
3.请求正文格式“:raw
Content-Type:application/json
Content-Type:text/plain
Content-Type:application/javascript
Content-Type:text/html
Content-Type:application/xml
4.请求正文格式:binary
Content-Type:application/octetstream 二进制流的数据
3.requests.put() 发送put请求
4.requests.delete() 发送delete请求5.requests.request() 发送任意请求,最核心的方法
method, 请求方式
url, 请求路径
params=None, get方式传参
data=None, post,put,patch传参
headers=None, 请求头
cookies=None, 请求的cookie信息
files=None, 文件上传
json=None post传参
auth=None, 鉴权
timeout=None, 超时
allow_redirects=True, 重定向
proxies=None, 代理
hooks=None,
stream=None, 文件下载
verify=None, 是否需要验证证书
cert=None, CA证书
6.requests.session() 发送任意请求,最核心的方法
三、requests()执行之后的返回response对象
res.text 响应的字符串格式数据
res.content 响应的bytes格式数据
res.json() 响应自动数据格式
res.status_code 状态码
res.reason 状态信息
res.cookies cookie 信息
res.headers 响应头
res.request.headers 请求头
四、实战
post :
data 默认 Content-Type:application/xwwwformurlencoded
json 默认 Content-Type:application/json
json.dumps() 将字典序列化成str
json.loads() 将str反序列化成字典
files 文件上传 默认 ContentType:multipart/formdata
import random
import requests
class Test4Api:
access_token=""
def test_get_token(self):
data = {
"grant_type": "client_credential",
"appid": "wx6b11b3efd1cdc290",
"secret": "106a9c6157c4db5f6029918738f9529d"
}
res = requests.get(url="https://api.weixin.qq.com/cgi-bin/token", params=data)
return_date= res.json()
print(return_date)
print(return_date["access_token"])
Test4Api.access_token=return_date["access_token"]
print(Test4Api.access_token)
def test_get_tags(self):
params = {"access_token": Test4Api.access_token}
print(params)
res=requests.get("https://api.weixin.qq.com/cgi-bin/tags/get",params=params)
print(res.text)
def test_get_news(self):
data={
"tag":{
"id":23475,
"name":"ms"+str(random.randint(100000,999999))
}
}
res= requests.post("https://api.weixin.qq.com/cgi-bin/tags/update?access_token="+ Test4Api.access_token,json=data)
print(res.request.headers)
print(res.text )
def test_uploadimg(self):
data = {
"media": open(r"C:\Users\Administrator\Desktop\1.jpg",mode="rb")
}
res = requests.post("https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=" + Test4Api.access_token,
files=data)
print(res.request.headers)
print(res.json())
五、需要带请求头的接口,需要带cookie的接口做cookie关联,基本上所有web项目的接口都是需要做cookie关联
import re
import requests
class Test5Api:
csrf_token=""
cookies=""
def test_get_csrf_token(self):
res = requests.get(url="http://47.107.116.139/phpwind")
# 通过正则表达式取值
obj= re.search('name="csrf_token" value="(.*?)"',res.text)
print(obj)
Test5Api.csrf_token=obj.group(1)
Test5Api.cookies= res.cookies
print(Test5Api.csrf_token)
def test_login(self):
data = {
"username":"msxy",
"password":"msxy",
"csrf_token": Test5Api.csrf_token,
"backurl": "http://47.107.116.139/phpwind/"
}
res = requests.post("http://47.107.116.139/phpwind/index.php?m=u&c=login",
data=data,cookies=Test5Api.cookies)
print(res.request.headers)
print(res.text)
六、一般情况我们会使用session关联
class Test5Api:
csrf_token=""
session=requests.session()
def test_get_csrf_token(self):
res = Test5Api.session.request("get",url="http://47.107.116.139/phpwind")
# 通过正则表达式取值
obj= re.search('name="csrf_token" value="(.*?)"',res.text)
print(obj)
Test5Api.csrf_token=obj.group(1)
print(Test5Api.csrf_token)
import re
import requests
from pytestdemo.testcases.test_demo5 import Test5Api
class Test6Api:
def test_login(self):
data = {
"username":"msxy1",
"password":"msxy",
"csrf_token": Test5Api.csrf_token,
"backurl": "http://47.107.116.139/phpwind/"
}
res = Test5Api.session.request("post","http://47.107.116.139/phpwind/index.php?m=u&c=login")
print(res.request.headers)
print(res.text)
或者可以conftest.py(推荐使用
)
import re
import pytest
import requests
@pytest.fixture(scope="session",autouse=True)
def get_csrf_token():
session=requests.session()
res = session.request("get", url="http://47.107.116.139/phpwind")
# 通过正则表达式取值
obj = re.search('name="csrf_token" value="(.*?)"', res.text)
print(obj)
print(obj.group(1))
yield (session,obj.group(1))
class Test6Api:
def test_login(self,get_csrf_token):
session,token=get_csrf_token
data = {
"username":"msxy1",
"password":"msxy",
"csrf_token": token,
"backurl": "http://47.107.116.139/phpwind/"
}
res = session.request("post","http://47.107.116.139/phpwind/index.php?m=u&c=login",
data=data)
print(token)
print(res.request.headers)
print(res.text)