使用requests模块进行封装,帮你处理 restful (译:儒哎斯否)类型的接口

一、requests 模块基本使用

1、准备接口的URL、请求参数、请求头

# 1. 构造注册、登录、充值请求的url
register_url = "注册url"
login_url = "登录url"
recharge_url = "充值url" # 2. 创建请求参数
register_params = {
"mobilephone": "",
"pwd": "",
"regname": "yuxing"
} login_params = {
"mobilephone": "",
"pwd": "",
} recharge_params = {
"mobilephone": "",
"amount": "",
} # 可以添加请求头,反爬虫措施,所以有的需要自己添加合法的请求, 但是多数情况下, 不需要修改
headers = {
"User-Agent": "Mozilla/5.0 shengruhuakai"
}

2、向服务器发送请求

get 请求:使用 requests 库中 get 方法

# get请求:使用 requests 库中 get 方法
# 如果给 params (派瑞斯)传参, 那么是以查询字符串参数的形式来传的--在url后传参
res = requests.get(register_url, params=register_params)
# 如果需要请求头则加上 headers 请求头参数
res1 = requests.get(register_url, params=register_params, headers=headers)
# 返回的 res 是一个Response的对象, 就可以把它当作是一个响应报文 # 可以从返回的对象中获取需要的数据----根据不同系统,获取字段也不同
# 获取响应状态码
print(res.status_code)
# 获取响应报文
print(res.text)
# 将响应报文转化为Python中的字典数据类型
print(res.json())
# 获取cookie
print(res.cookies)

post请求:使用 requests 库中 post 方法

# post请求:使用 requests 库中 post 方法
# 一般情况下 post 请求不会以 params 来传参
# 如果给 params 传参, 那么是以查询字符串参数的形式来传的--在url后传参不安全
res3 = requests.post(register_url, params=register_params, headers=headers)
# 返回的是一个 Response (瑞思帮死)的对象, 就可以把它当作是一个响应报文
# 从响应报文中获取需要参数
print(res3.status_code)

3、如果给 data 传参, 那么会以 x-www-form-urlencoded 的形式来传参

如果给 json 传参, 那么会以 json 格式的字符串形式来传参

# 如果给 data 传参, 那么会以 x-www-form-urlencoded 的形式来传参
res4 = requests.post(register_url, data=register_params, headers=headers)
# 返回的是一个Response的对象, 就可以把它当作是一个响应报文
# print(res4.status_code) # 如果给 json 传参, 那么会以 json 格式的字符串形式来传参
# 这里的params既可以是字典, 也可以是json格式的字符串----但是不以字符串来传,字典不易出错
# 所有的参数, 都转化为字典之后来传递
res5 = requests.post(register_url, json=register_params, headers=headers)
# 返回的是一个Response的对象, 就可以把它当作是一个响应报文
print(res5.status_code)

4、如果需要上个接口的 cookie

第一种方法:在登录后取出 coolie 以参数的形式传给 充值接口,不方便一般不使用

# 先登录
login_res = requests.post(login_url, data=login_params, headers=headers) # cookie = login_res.cookies['JSESSIONID'] # 不能单独取出字符串传递 print(login_res.status_code)
cookie = login_res.cookies # 只能传递cookies对象 # 充值 ---- cookies 以参数传递
recharge_res = requests.post(recharge_url, data=recharge_params, headers=headers, cookies=cookie)
print(recharge_res.status_code)

第二种方法:使用 requests (瑞考斯特)中的 Session(赛神)创建会话,之后使用 Session 会话发送请求

# 创建 Session 会话对象, 相当于Jmeter当中的Cookie管理器
one_session = requests.Session() # 先登录,使用会话发送请求
login_res = one_session.post(login_url, data=login_params, headers=headers) # 充值
recharge_res = one_session.post(recharge_url, data=recharge_params, headers=headers) # 关闭会话,close(科楼司)
# 关闭之后, 依然可以发起请求
# 关闭会话只不过是释放资源
one_session.close()

二、封装 requests 模块

import requests
import json
from scripts.handle_log import do_log class HandleTheRequest:
"""
封装请求接口类
"""
def __init__(self):
"""
创建会话对象,定义一个session的参数
"""
self.one_session = requests.Session() def to_request(self, url, method, data=None, headers=None, is_json=False):
"""
定义一个请求方法
:param url: 接口地址
:param method: 请求方法get、post
:param data: 参数
:param headers: 请求头
:param is_json: 是否为json请求数据
:return: 请求结果
"""
if isinstance(data, str):
try:
data = json.loads(data)
except Exception as e:
data = eval(data)
do_log.error("数据转换器错误".format(e)) if method.lower() == "get": # 将输入的请求方法转化为大写/lower
res = self.one_session.get(url, params=data)
elif method.lower() == "post":
if is_json: # 如果is_json为True,就以json格式的形式来传参
res = self.one_session.post(url, json=data, headers=headers)
else: # 如果is_json为False,就以www-form的形式传参
res = self.one_session.post(url, data=data, headers=headers)
else:
res = None
print("不支持[{}]这种方法传参".format(method))
do_log.error("发送的请求不是get/post,不支持的请求方式".format(method))
return res def close(self):
"""
关闭session会话
:return:
"""
self.one_session.close() # do_register = HandleTheRequest() if __name__ == '__main__':
# 1.构造前端的接口
register_url = "请求地址" # 2.构造请求参数,为字典烈性Params
register_params = {
"mobilephone": "",
"pwd": "",
"regname": "shouhu"
} # 添加请求头
headers = {
"User-Agent": "Mozilla/5.0 shouhu"
} a1_request = HandleTheRequest() register_request = a1_request.to_request(url=register_url, method="post", data=register_params, headers=headers) # 传请求头
# register_request = a1_request.to_request(url=register_url, method="post", data=register_params)
print(f"cookies值为:{register_request.cookies}") # 关闭会话
a1_request.close() # 如果以json格式传参需要设置为 True
# initiate_request.to_request(method="post", url=recharge_url, data=recharge_params, is_json=True)
pass

全面的封装:https://www.cnblogs.com/xiaogongjin/p/11372155.html

import requests
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) class HandleRequests: def __init__(self):
self.one_session = requests.Session() def request(self, url, method='get', headers=None, param=None, data=None, is_json=False, is_http=False):
'''
定义一个请求方法
:param url: 域名接口
:param method: 请求方法
:param headers: 请求头
:param param: get请求体
:param data: post表单请求体
:param is_json: 是否为json请求数据
:param is_http: 是否为http请求
:return: 请求结果
'''
if is_http is False:
if method.lower() == 'get':
res = self.one_session.get(url=url, headers=headers, params=param, verify=False)
return res
elif method.lower() == 'post':
if is_json:
res = self.one_session.post(url=url, headers=headers, data=data, verify=False)
return res
else:
res = self.one_session.post(url=url, headers=headers, json=data, verify=False)
return res
elif method.lower() == 'delete':
res = self.one_session.delete(url=url, headers=headers, verify=False)
return res
else:
print("不支持{}请求方法!".format(method))
else:
if method.lower() == 'get':
res = self.one_session.get(url=url, headers=headers, params=data)
return res
elif method.lower() == 'post':
if is_json:
res = self.one_session.post(url=url, headers=headers, data=data)
return res
else:
res = self.one_session.post(url=url, headers=headers, json=data)
return res
elif method.lower() == 'delete':
res = self.one_session.delete(url=url, headers=headers)
return res
else:
print("不支持{}请求方法!".format(method)) def close_cookie(self):
'''
关闭cookie
'''
self.one_session.close()

*******请大家尊重原创,如要转载,请注明出处:转载自:https://www.cnblogs.com/shouhu/  谢谢!!*******

Python 使用 requests 模块发送请求的使用及封装的更多相关文章

  1. 使用Python的requests模块编写请求脚本

    requests模块可用来编写请求脚本. 比如,使用requests的post函数可以模拟post请求: resp = requests.post(url, data = content) url即为 ...

  2. requestS模块发送请求的时候怎么传递参数

    首先要确定接口的传递参数是什么类型的,如果接口是查询,使用get请求方法,传递参数的时候使用params, 如果接口需要的json型参数的话,使用json,如果是上传文件的话,通过files参数在传递 ...

  3. Python接口测试-使用requests模块发送GET请求

    本篇主要记录下使用python的requests模块发送GET请求的实现代码. 向服务器发送get请求:无参数时:r = requests.get(url)带params时:r = requests. ...

  4. Python接口测试-使用requests模块发送post请求

    本篇主要记录下使用python的requests模块发送post请求的实现代码. #coding=utf-8 import unittest import requests class PostTes ...

  5. Python之requests模块-cookie

    cookie并不陌生,与session一样,能够让http请求前后保持状态.与session不同之处,在于cookie数据仅保存于客户端.requests也提供了相应到方法去处理cookie. 在py ...

  6. Python之requests模块-session

    http协议本身是无状态的,为了让请求之间保持状态,有了session和cookie机制.requests也提供了相应的方法去操纵它们. requests中的session对象能够让我们跨http请求 ...

  7. Python之requests模块-request api

    requests所有功能都能通过"requests/api.py"中的方法访问.它们分别是: requests.request(method, url, **kwargs) req ...

  8. Python爬虫之使用Fiddler+Postman+Python的requests模块爬取各国国旗

    介绍   本篇博客将会介绍一个Python爬虫,用来爬取各个国家的国旗,主要的目标是为了展示如何在Python的requests模块中使用POST方法来爬取网页内容.   为了知道POST方法所需要传 ...

  9. python之requests模块快速上手

    安装 pip3 install requests 使用 发送请求 import requests r = requests.get('http://www.baidu.com') 还可以如下方式发送不 ...

随机推荐

  1. Airless Pump Bottle For The Rise Of Cosmetic Packaging Solutions

    Airless Pump Bottle    are used in the rise of cosmetic packaging solutions. According to the suppli ...

  2. python 基础之字符串方法

    字符串 print('chenxi'*8) 测试 D:\python\python.exe D:/untitled/dir/for.py chenxichenxichenxichenxichenxic ...

  3. vbs 入门

    dim  定义变量名 dim name------------- dim name,agename = "worf"age = 20 msgbox   输出 msgbox name ...

  4. python中numpy.concatenate()函数的使用

    numpy库数组拼接np.concatenate 原文:https://blog.csdn.net/zyl1042635242/article/details/43162031 思路:numpy提供了 ...

  5. 代码审计变成CTF

    0x01 代码审计中的信息收集 一个cms代码量确实不少,通读代码耗时长,效果也不一定好.而一个功能点如果之前出过漏洞,特别是多次出现漏洞的地方,证明开发者对这个漏洞的理解不充分,很容易再次绕过补丁. ...

  6. Linux下安装Docker,报错docker: unrecognized service的两种解决方案

    转自(方法1):https://www.cnblogs.com/ECJTUACM-873284962/p/9362840.html

  7. Python 面试问答 Top 25

    Python 是一种解释型,交互式,面向对象的高级编程语言.和别的一些使用标点符号的语言不同,Pythons使用了大量的英语单词作为关键字,因而具有很好的可读性.而且跟其他编程语言相比,它有更少的语法 ...

  8. 如何查看python的notebook文件.ipynb

    文章中的ipython notebook和jupyter notebook基本可以互换,不过使用ipython notebook会警告您要使用jupyter notebook.其他没有区别. ---- ...

  9. python中时间戳的探索

    声明 本文章只针对python3.6及以上版本. 问题提出 首先,我们先import一些必要模块: In [1]: from datetime import datetime, timezone, t ...

  10. LeetCode 1025. Divisor Game

    题目链接:https://leetcode.com/problems/divisor-game/ 题意:Alice和Bob玩一个游戏,Alice先开始.最初,黑板上有一个数字N.每一轮,选手首先需要选 ...