使用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. 4 htmlCSS&图像&表格&列表&表单&框架&颜色

    CSS: Cascading Style Sheeet   层叠样式表  cascadig:瀑布 html:网页的结构 css:网页的外观 JavaScript:网页的动作 CSS的使用方式: 内联样 ...

  2. 九 三种Struts2访问Servlet方式总结

    Servlet是单例的,Action是多例的. 多个程序访问Servlet只会创建一个Servlet对象,多个程序访问Action会创建对应的多个Action对象. 跳转页面可以获取对象的属性,说明使 ...

  3. Vases and Flowers-HDU4614 二分+线段树

    题意: 给你N个花瓶,编号是0  到 N - 1 ,一开始每个花瓶都是空的,你有两个操作: 第一个操作: 从第x个花瓶起开始插花,总共插y束,如果遇到花瓶中有花就跳过这个花瓶,直到花插完或者 插到第N ...

  4. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 表格:为所有表格的单元格添加边框

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  5. ubuntu16.04下安装docker和docker-compose

    开始安装 由于apt官方库里的docker版本可能比较旧,所以先卸载可能存在的旧版本:$ sudo apt-get remove docker docker-engine docker-ce dock ...

  6. C++ 判断是文件还是文件夹

    转载:https://www.csdn.net/gather_23/NtDaIg1sMDYtYmxvZwO0O0OO0O0O.html Windows平台代码如下: #include <wind ...

  7. Codeforces Round #586 (Div. 1 + Div. 2)E(拓扑排序,思维)

    #include<bits/stdc++.h>using namespace std;int n,m,s; vector<int>edge[200007];queue<i ...

  8. 设计模式课程 设计模式精讲 11-2 装饰者模式coding

    1 代码演练 1.1 代码演练1(未使用装饰者模式) 1.2 代码演练2(使用装饰者模式) 1 代码演练 1.1 代码演练1(未使用装饰者模式) 需求: 大妈下班卖煎饼,加一个鸡蛋加一元,一个火腿两元 ...

  9. C#二维数组的初始化和存取

    static void Main(string[] args) { ,]; ; j < ; j++) { strings[j, ] = $"{j}.0"; strings[j ...

  10. Ideone:在线多语言编程执行器工具

    Ideone:在线多语言编程执行器工具此网站提供40种编程语言以上, 能在线直接做编译和执行的动作,该工具是一款简易的编程测试工具,虽然不能替代专业版的工具,但是其功能非常全面. Ideone,一款在 ...