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

一、requests 模块基本使用

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

  1. # 1. 构造注册、登录、充值请求的url
  2. register_url = "注册url"
  3. login_url = "登录url"
  4. recharge_url = "充值url"
  5.  
  6. # 2. 创建请求参数
  7. register_params = {
  8. "mobilephone": "",
  9. "pwd": "",
  10. "regname": "yuxing"
  11. }
  12.  
  13. login_params = {
  14. "mobilephone": "",
  15. "pwd": "",
  16. }
  17.  
  18. recharge_params = {
  19. "mobilephone": "",
  20. "amount": "",
  21. }
  22.  
  23. # 可以添加请求头,反爬虫措施,所以有的需要自己添加合法的请求, 但是多数情况下, 不需要修改
  24. headers = {
  25. "User-Agent": "Mozilla/5.0 shengruhuakai"
  26. }

2、向服务器发送请求

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

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

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

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

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

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

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

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

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

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

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

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

二、封装 requests 模块

  1. import requests
  2. import json
  3. from scripts.handle_log import do_log
  4.  
  5. class HandleTheRequest:
  6. """
  7. 封装请求接口类
  8. """
  9. def __init__(self):
  10. """
  11. 创建会话对象,定义一个session的参数
  12. """
  13. self.one_session = requests.Session()
  14.  
  15. def to_request(self, url, method, data=None, headers=None, is_json=False):
  16. """
  17. 定义一个请求方法
  18. :param url: 接口地址
  19. :param method: 请求方法get、post
  20. :param data: 参数
  21. :param headers: 请求头
  22. :param is_json: 是否为json请求数据
  23. :return: 请求结果
  24. """
  25. if isinstance(data, str):
  26. try:
  27. data = json.loads(data)
  28. except Exception as e:
  29. data = eval(data)
  30. do_log.error("数据转换器错误".format(e))
  31.  
  32. if method.lower() == "get": # 将输入的请求方法转化为大写/lower
  33. res = self.one_session.get(url, params=data)
  34. elif method.lower() == "post":
  35. if is_json: # 如果is_json为True,就以json格式的形式来传参
  36. res = self.one_session.post(url, json=data, headers=headers)
  37. else: # 如果is_json为False,就以www-form的形式传参
  38. res = self.one_session.post(url, data=data, headers=headers)
  39. else:
  40. res = None
  41. print("不支持[{}]这种方法传参".format(method))
  42. do_log.error("发送的请求不是get/post,不支持的请求方式".format(method))
  43. return res
  44.  
  45. def close(self):
  46. """
  47. 关闭session会话
  48. :return:
  49. """
  50. self.one_session.close()
  51.  
  52. # do_register = HandleTheRequest()
  53.  
  54. if __name__ == '__main__':
  55. # 1.构造前端的接口
  56. register_url = "请求地址"
  57.  
  58. # 2.构造请求参数,为字典烈性Params
  59. register_params = {
  60. "mobilephone": "",
  61. "pwd": "",
  62. "regname": "shouhu"
  63. }
  64.  
  65. # 添加请求头
  66. headers = {
  67. "User-Agent": "Mozilla/5.0 shouhu"
  68. }
  69.  
  70. a1_request = HandleTheRequest()
  71.  
  72. register_request = a1_request.to_request(url=register_url, method="post", data=register_params, headers=headers) # 传请求头
  73. # register_request = a1_request.to_request(url=register_url, method="post", data=register_params)
  74. print(f"cookies值为:{register_request.cookies}")
  75.  
  76. # 关闭会话
  77. a1_request.close()
  78.  
  79. # 如果以json格式传参需要设置为 True
  80. # initiate_request.to_request(method="post", url=recharge_url, data=recharge_params, is_json=True)
  81. pass

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

  1. import requests
  2. import urllib3
  3. urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
  4.  
  5. class HandleRequests:
  6.  
  7. def __init__(self):
  8. self.one_session = requests.Session()
  9.  
  10. def request(self, url, method='get', headers=None, param=None, data=None, is_json=False, is_http=False):
  11. '''
  12. 定义一个请求方法
  13. :param url: 域名接口
  14. :param method: 请求方法
  15. :param headers: 请求头
  16. :param param: get请求体
  17. :param data: post表单请求体
  18. :param is_json: 是否为json请求数据
  19. :param is_http: 是否为http请求
  20. :return: 请求结果
  21. '''
  22. if is_http is False:
  23. if method.lower() == 'get':
  24. res = self.one_session.get(url=url, headers=headers, params=param, verify=False)
  25. return res
  26. elif method.lower() == 'post':
  27. if is_json:
  28. res = self.one_session.post(url=url, headers=headers, data=data, verify=False)
  29. return res
  30. else:
  31. res = self.one_session.post(url=url, headers=headers, json=data, verify=False)
  32. return res
  33. elif method.lower() == 'delete':
  34. res = self.one_session.delete(url=url, headers=headers, verify=False)
  35. return res
  36. else:
  37. print("不支持{}请求方法!".format(method))
  38. else:
  39. if method.lower() == 'get':
  40. res = self.one_session.get(url=url, headers=headers, params=data)
  41. return res
  42. elif method.lower() == 'post':
  43. if is_json:
  44. res = self.one_session.post(url=url, headers=headers, data=data)
  45. return res
  46. else:
  47. res = self.one_session.post(url=url, headers=headers, json=data)
  48. return res
  49. elif method.lower() == 'delete':
  50. res = self.one_session.delete(url=url, headers=headers)
  51. return res
  52. else:
  53. print("不支持{}请求方法!".format(method))
  54.  
  55. def close_cookie(self):
  56. '''
  57. 关闭cookie
  58. '''
  59. 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. 1-使用React的方式

    认识 React React是一个用于构建用户界面的 JAVASCRIPT 库.(JQuery也是) React主要用于构建UI,很多人认为 React 是 MVC 中的 V(视图).mvvm Rea ...

  2. 解决HTML5(富文本内容)连续数字、字母不自动换行

    最近开发了一个与富文本相关的功能,大概描述一下:通过富文本编辑器添加的内容,通过input展示出来(这里用到了 Vue 的 v-html 指令). 也是巧合,编辑了一个只有数字组成的长文本,等到展示的 ...

  3. STM32L152笔记

    一 段式液晶初始化停在while(LCD_GetFlagStatus(LCD_FLAG_RDY) == RESET)中不出来,网上给的原因和解决办法: 1 也RTC的时钟有关,需要先配置RTC时钟 2 ...

  4. 【PAT甲级】1038 Recover the Smallest Number (30 分)

    题意: 输入一个正整数N(<=10000),接下来输入N个字符串,每个字符串包括至多8个字符,均为数字0~9.输出由这些字符串连接而成的最小数字(不输出前导零). trick: 数据点0只包含没 ...

  5. Linux centosVMware xshell使用xftp传输文件、使用pure-ftpd搭建ftp服务

    一.xshell使用xftp传输文件 Ctrl+Alt+F 弹出 下载进入 填写任意名字,自己邮箱 进入邮箱点击网址就自动下载了 然后安装 二.使用pure-ftpd搭建ftp服务 yum insta ...

  6. Windows服务器权限分析

    一.Windows常见用户 二.Windows常见用组 2.1Windows常见组 2.2Windows2003常见组 三.Windows目录权限 四.Windows2003默认权限 五.不同环境下的 ...

  7. C/C++网络编程1——linux下实现

    网络编程就是编写程序使两台联网的计算机相互交换数据. 例子:服务器端开启一个socket,监听9999端口.客户端向服务器端发起请求,服务器端收到请求以后,给客户端发送一句:"hello w ...

  8. shell脚本中 “set -e” 的作用

    #!/bin/bash set -e command 1command 2 每个脚本都应该在文件开头加上set -e,这句语句告诉bash如果任何语句的执行结果不是true则应该退出.这样的好处是防止 ...

  9. 三 传递包装pojo&ResultMap

    传递包装pojo: 将实体类对象封装在QueryVo类中进行操作 mapper接口: mapper映射文件: 测试: ResultMap的使用: type:映射成的pojo类型 id:resultMa ...

  10. Hadoop端口与界面

    NameNode:7180 Cloudera Manager集群管理界面: NameNode:50070 NameNode Web UI/数据管理界面:   NameNode:8020/9000 Ha ...