python requests模块封装详解

 更新时间:2023年09月05日 15:52:52   作者:纯之风  
requests是一个常用的HTTP请求库,可以方便地向网站发送HTTP请求,并获取响应结果,本文主要和大家介绍一下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爬取网页转换为PDF文件

    python爬取网页转换为PDF文件

    这篇文章主要为大家详细介绍了python爬取网页转换为PDF文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • 通过Python实现Payload分离免杀过程详解

    通过Python实现Payload分离免杀过程详解

    这篇文章主要介绍了通过Python实现Payload分离免杀过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • 在IPython中进行Python程序执行时间的测量方法

    在IPython中进行Python程序执行时间的测量方法

    今天小编就为大家分享一篇在IPython中进行Python程序执行时间的测量方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • python基于itchat实现微信群消息同步机器人

    python基于itchat实现微信群消息同步机器人

    本篇文章主要介绍了python基于itchat实现微信群消息同步机器人,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • Python求两个list的差集、交集与并集的方法

    Python求两个list的差集、交集与并集的方法

    这篇文章主要介绍了Python求两个list的差集、交集与并集的方法,是Python集合数组操作中常用的技巧,需要的朋友可以参考下
    2014-11-11
  • Python zip()函数的用法和技巧(解锁并行迭代的魔力)

    Python zip()函数的用法和技巧(解锁并行迭代的魔力)

    zip()函数是Python中一个简洁而强大的工具,它通过并行迭代多个序列,让代码更加优雅和易读,这篇文章给大家介绍Python zip()函数完全指南:解锁并行迭代的魔力,感兴趣的朋友跟随小编一起看看吧
    2026-02-02
  • python3下使用cv2.imwrite存储带有中文路径图片的方法

    python3下使用cv2.imwrite存储带有中文路径图片的方法

    今天小编就为大家分享一篇python3下使用cv2.imwrite存储带有中文路径图片的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Python中的可变变量与不可变变量的使用

    Python中的可变变量与不可变变量的使用

    本文主要介绍了Python中的可变变量与不可变变量的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-03-03
  • kafka-python批量发送数据的实例

    kafka-python批量发送数据的实例

    今天小编就为大家分享一篇kafka-python批量发送数据的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python Excel处理库openpyxl使用详解

    Python Excel处理库openpyxl使用详解

    openpyxl是一个第三方库,可以处理xlsx格式的Excel文件。这篇文章主要介绍了Python Excel处理库openpyxl使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05

最新评论