python requests模块封装详解
一、requests简介
requests是一个常用的HTTP请求库,可以方便地向网站发送HTTP请求,并获取响应结果; requests模块比 urllib 模块更简洁;使用 requests发送HTTP请求需要先导入requests模块,导入后就可以发送HTTP请求,使用requests提供的方法向指定url发送HTTP请求
关于python开发的HTTP库,在Python内置模块的基础上进行了高度的封装,从而使得Pythoner进行网络请求时,变得美好了许多,使用requests可以完成浏览器任何操作
二、请求类型
HTTP的请求类型有POST、GET、PUT、DELETE、HEAD以及OPTIONS,其中POST和GET是最常使用的
三、使用demo
# 导入requests包 import requests # 发送请求 response = requests.get('https://www.runoob.com/') # 返回网页内容 print(response.text)
注意:每次调用requests请求之后,会返回一个response对象,该对象包含了具体的响应信息,如状态码、响应头、响应内容等:
- response.text:获取文本响应内容,即网页源代码(str格式)
- response.context:获取二进制响应内容,即网页源代码(bytes格式)
- response.json():获取JSON响应内容
- response.raw:获取原始响应内容
- response.status_code:响应状态码,返回值为200表示网络请求正常
- response.encoding:编码方式
- response.apparent_encoding:从内容中分析出的响应内容编码方式
- response.request:请求对象;主要包括url、method、headers等
- response.url:输出请求的网址链接
print(response.status_code) # 获取响应状态码 print(response.headers) # 获取响应头 print(response.content) # 获取响应内容
四、个人风格requests封装
import retrying # 需手动安装 class HTTP(object): """ requests模块封装使用: import HTTP # post调用时格式为json格式 headers = { "Content-Type": "application/json", "Charset": "UTF-8" } result = HTTP.get(url, params) result = HTTP.post(url, data=json.dumps(payload), headers=header) """ @staticmethod def __requests(method, url, **kwargs): """ 发送http请求 @param url: 接口url @param method: http请求方法 @param kwargs: 接受request原生的关键字参数 @return 响应对象 """ resp = getattr(requests, method)(url, **kwargs) if resp.status_code == 200: result = resp.json() return result raise Exception('fail:{},url:{},method:{}'.format(json.dumps(resp.content),url,method)) @retrying.retry(stop_max_attempt_number=3) def get(self, url, params=None, **kwargs): return self.__requests('get', url, params=params, **kwargs) @retrying.retry(stop_max_attempt_number=3) def post(self, url, data, **kwargs): return self.__requests('post', url, data=data, **kwargs) @retrying.retry(stop_max_attempt_number=3) def put(self, url, data=None, **kwargs): return self.__requests('put', url, data=data, **kwargs) @retrying.retry(stop_max_attempt_number=3) def delete(self, url, **kwargs): return self.__requests('delete', url, **kwargs) @retrying.retry(stop_max_attempt_number=3) def head(self, url, **kwargs): return self.__requests('head', url, **kwargs) @retrying.retry(stop_max_attempt_number=3) def patch(self, url, data=None, **kwargs): return self.__requests('patch', url, data=data, **kwargs)
五、实例demo
GET请求
在URL中常见?符号,httpbin.org/get?key=val
这种带有?传递关键字参数的方式,requests可以通过params实现
condition_params = {'k1':'v1', 'k2':'v2', 'k3':None, 'k4':['v4','v5']} r = requets.get('http://httpbin.org/get', params=condition_params)
注意:
- 字典中键值为None的键不会被拼接添加到url中
- 多个键值中间用&符号拼接
- 键值可是列表例如上例中'k4'
- 执行结果print(r.url) -->
httpbin.org/get?k1=v1&k…
POST请求
import requests import json # 指定post请求时的url url = 'https://api.github.com/some/endpoint' # 需要上传或发送post请求的数据 payload = {'some': 'data'} # 指定请求格式为json格式 headers = {'content-type': 'application/json'} # 发送请求时将字典转换为json格式数据 res = requests.post(url, data=json.dumps(payload), headers=headers)
到此这篇关于python requests模块封装详解的文章就介绍到这了,更多相关python requests内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Python中在for循环中嵌套使用if和else语句的技巧
Python的语法糖非常强大,比如Python中在for循环中嵌套使用if和else语句的技巧便十分给力,下面我们就举几个例子来看详细的用法:2016-06-06
最新评论