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 ,其中POSTGET是最常使用的

三、使用demo

python 复制代码
# 导入requests包  
import requests  
  
# 发送请求  
response = requests.get('https://www.runoob.com/')  
  
# 返回网页内容  
print(response.text)

注意:每次调用requests请求之后,会返回一个response对象,该对象包含了具体的响应信息,如状态码、响应头、响应内容等:

  1. response.text:获取文本响应内容,即网页源代码(str格式)
  2. response.context:获取二进制响应内容,即网页源代码(bytes格式)
  3. response.json():获取JSON响应内容
  4. response.raw:获取原始响应内容
  5. response.status_code:响应状态码,返回值为200表示网络请求正常
  6. response.encoding:编码方式
  7. response.apparent_encoding:从内容中分析出的响应内容编码方式
  8. response.request:请求对象;主要包括url、method、headers等
  9. response.url:输出请求的网址链接
python 复制代码
print(response.status_code)  # 获取响应状态码
print(response.headers)  # 获取响应头
print(response.content)  # 获取响应内容

四、个人风格requests封装

python 复制代码
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

(1)GET请求

在URL中常见?符号,httpbin.org/get?key=val 这种带有?传递关键字参数的方式,requests可以通过params实现

python 复制代码
condition_params = {'k1':'v1', 'k2':'v2', 'k3':None, 'k4':['v4','v5']}  
r = requets.get('http://httpbin.org/get', params=condition_params)

注意:

  1. 字典中键值为None的键不会被拼接添加到url中
  2. 多个键值中间用&符号拼接
  3. 键值可是列表例如上例中'k4'
  4. 执行结果print(r.url) --> httpbin.org/get?k1=v1&k...

(2)POST请求

python 复制代码
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)  
相关推荐
新子y2 分钟前
【小白笔记】「while」在程序语言中的角色
笔记·python
java1234_小锋11 分钟前
[免费]基于Python的YOLO深度学习垃圾分类目标检测系统【论文+源码】
python·深度学习·yolo·垃圾分类·垃圾分类检测
野犬寒鸦32 分钟前
从零起步学习MySQL || 第十章:深入了解B+树及B+树的性能优势(结合底层数据结构与数据库设计深度解析)
java·数据库·后端·mysql·1024程序员节
上进小菜猪34 分钟前
智能信创新范式:浙江省人民医院的全栈国产化与智能数据底座实践
后端
凌晨一点的秃头猪40 分钟前
面向对象和面向过程 编程思想
python
总有刁民想爱朕ha1 小时前
银河麒麟v10批量部署Python Flask项目小白教程
开发语言·python·flask·银河麒麟v10
没有bug.的程序员2 小时前
Spring 常见问题与调试技巧
java·后端·spring·动态代理·1024程序员节
黎燃2 小时前
构筑自主可控医疗生态-数智融合新引擎-医疗全栈信创跃迁
后端
Python×CATIA工业智造2 小时前
Python函数包装技术详解:从基础装饰器到高级应用
python·pycharm
R.lin2 小时前
OSS服务模块-基于数据库配置的Java OSS服务解决方案,支持MinIO、七牛云、阿里云和腾讯云
java·数据库·后端·mysql