参考大佬文章:120
【a不是字典】
Api_send
登陆态接口被调用:
把之前的请求代码放到了else里,新的if分支中判断了下返回体设置,然后声明了a,然后a进行请求登陆态接口,然后直接省略后面一切步骤,返回a即可。
普通接口调用:
在接收的时候对登陆态返回的东西用类型判断一下,就知道是字典还是a了,若是a,那就是说明登陆态设置的是cookie持久化,那么普通接口的请求代码也要改,也要从requests.request改成a.request方法了
需要判断login_res的类型看看是不是cookie持久化,若是,那么后面的所有具体不同的请求体类型的请求代码,直接全换即可
插入url中:
增加if ,来判断login_res的类型,若是字典的情况,才会进行插入,否则就是cookie,不需要插入到url
if '?' not in url:
url += '?'
if type(login_res) ==dict:
for i in login_res.keys():
url += i + '=' + login_res[i] + '&'
else:
if type(login_res) == dict:
for i in login_res.keys():
url += '&' + i + '=' + login_res[i]
插入header:
if type(login_res) == dict:
header.update(login_res)
请求体:
如果是字典那么还是之前的requests.request,如果不是,那么就是cookie持久化,那么就用a.requests来请求,此时a就是login_res,login_res是调用登陆态接口函数返回的东西
其中只有为字典时,才需要进行遍历插入请求体的代码,若不是,那么就直接用login_res请求就可以
try:
if ts_body_method == 'none':
if type(login_res) == dict:
response = requests.request(ts_method.upper(), url, headers=header, data={}) # 请求方式大写、URL、头部、数据
else:
response = login_res.request(ts_method.upper(), url, headers=header, data={}) # 请求方式大写、URL、头部、数据
elif ts_body_method == 'form-data':
files = []
payload = {} # 字典
for i in eval(ts_api_body):
payload[i[0]] = i[1]
if type(login_res) == dict:
for i in login_res.keys():
payload[i] = login_res[i]
response = requests.request(ts_method.upper(), url, headers=header, data=payload, files=files)
else:
response = login_res.request(ts_method.upper(), url, headers=header, data=payload, files=files)
elif ts_body_method == 'x-www-form-urlencoded':
header['Content-Type'] = 'application/x-www-form-urlencoded'
payload = {} # 字典
for i in eval(ts_api_body):
payload[i[0]] = i[1]
if type(login_res) == dict:
for i in login_res.keys():
payload[i] = login_res[i]
response = requests.request(ts_method.upper(), url, headers=header, data=payload)
else:
response = login_res.request(ts_method.upper(), url, headers=header, data=payload)
elif ts_body_method == 'GraphQL':
header['Content-Type'] = 'application/json'
query = ts_api_body.split('*WQRF*')[0]
graphql = ts_api_body.split('*WQRF*')[1]
try:
eval(graphql)
except:
graphql = '{}'
payload = '{"query":"%s","variables":%s}' % (query, graphql)
if type(login_res) == dict:
response = requests.request(ts_method.upper(), url, headers=header, data=payload)
else:
response = login_res.request(ts_method.upper(), url, headers=header, data=payload)
else: # 五个raw子选项
if ts_body_method == 'Text':
header['Content-Type'] = 'text/plain'
if ts_body_method == 'JavaScript':
header['Content-Type'] = 'text/plain'
if ts_body_method == 'Json':
ts_api_body = json.loads(ts_api_body)
for i in login_res.keys():
ts_api_body[i] = login_res[i]
ts_api_body = json.dumps(ts_api_body)
header['Content-Type'] = 'text/plain'
if ts_body_method == 'Html':
header['Content-Type'] = 'text/plain'
if ts_body_method == 'Xml':
header['Content-Type'] = 'text/plain'
if type(login_res) == dict:
response = requests.request(ts_method.upper(), url, headers=header, data=ts_api_body.encode('utf-8'))
else:
response = login_res.request(ts_method.upper(), url, headers=header, data=ts_api_body.encode('utf-8'))