前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python requests接口请求封装(二)

Python requests接口请求封装(二)

作者头像
王大力测试进阶之路
发布2019-10-25 19:12:08
2K0
发布2019-10-25 19:12:08
举报
文章被收录于专栏:橙子探索测试橙子探索测试
12 import json
13 import requests
14
15
16 class HttpRequests(object):
17     """
18     eg: request = HttpRequests()
19         response = request(method, url, data)
20         or
21         response = request.send_request(method, url, data)
22         print(response.text)
23     """
24     def __init__(self):
25         self.session = requests.Session()
26
27     def send_request(self, method, url, params_type='form', data=None, **kwargs):
28         method = method.upper()
29         params_type = params_type.upper()
30         if isinstance(data, str):
31             try:
32                 data = json.loads(data)
33             except Exception:
34                     data = eval(data)
35         if 'GET' == method:
36             response = self.session.request(method=method, url=url, params=data, **kwargs)
37         elif 'POST' == method:
38             if params_type == 'FORM':  # 发送表单数据,使用data参数传递
39                 response = self.session.request(method=method, url=url, data=data, **kwargs)
40             elif params_type == 'JSON':  # 如果接口支持application/json类型,则使用json参数传递
41                 response = self.session.request(method=method, url=url, json=data, **kwargs)
42             else:  # 如果接口需要传递其他类型的数据比如 上传文件,调用下面的请求方法
43                 response = self.session.request(method=method, url=url, **kwargs)
44         # 如果请求方式非 get 和post 会报错,当然你也可以继续添加其他的请求方法
45         else:
46             raise ValueError('request method "{}" error ! please check'.format(method))
47         return response
48
49     def __call__(self, method, url, params_type='form', data=None, **kwargs):
50         return self.send_request(method, url,
51                                  params_type=params_type,
52                                  data=data,
53                                  **kwargs)
54
55     def close_session(self):
56         self.session.close()
57         try:
58             del self.session.cookies['JSESSIONID']
59         except:
60             pass
61
62
63 request = HttpRequests()
64
65
66 if __name__ == '__main__':
67     pass

   这个封装只针对了get请求和post请求,当然你也可以把put,delete等请求添加在32行代码后面,实现更多的请求方式

  解释一下30-34行代码: 这几行数据是为了把json和字符串类型的数据转换为字典的格式(通过使用字典传递接口参数)且可以处理一些特殊的形式,比如下面这样的格式

  '{"mobilephone": None, "pwd": null}' # 字符串类型的,但是即不是json形式的字符串,也不是字典类型的字符串,因为字典里面没有null

data

  大多数post请求的接口默认支持参数类型Content-Type为application/x-www-form-urlencoded, 它告诉我们请求的接口参数需要传递一个form表单,那么我们往往是通过构造一个字典来传递form表单的,

  所以当我们向服务器提交form表单时就可以使用data参数,它会接收一个字典类型的数据,存放到请求体中,然后发送给服务器(参数需是字典类型)json

  首先你访问的接口需要支持content_type为application/json格式的数据类型,那么你就可以通过json这个参数来传递接口参数(参数可以是字典也可以是json类型)

params和data区别

  1. 发送get请求时,由于get请求没有请求体,请求参数只能跟在url地址后的,而且服务器也只能通过解析url获得请求的参数,因此get()方法发送get请求时只能使用params参数,它会把请求的参数默认追加到url地址后面

  2. 通常情况下用户需要提交某些数据时,发送的请求一般都为post请求,post请求会提交一个form表单,那么我们就可以构造一个字典格式的数据,使用data参数传递,由于post请求是有请求体的,而且请求参数就存放在请求体中,服务器也只能通过解析请求体中内容而获得请求的参数,所以post请求不能使用params传递接口参数,只能使用data,json,file等, data参数会把请求参数放到请求体中

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 橙子探索测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档