四时宝库

程序员的知识宝库

Python 实现 GET/POST 请求和文件上传下载?看这款超强类Request 库

功能简介

HttpRequest 类主要提供以下功能:

  1. 发送 GET 请求:用于从服务器获取资源。
  2. 发送 POST 请求:用于向服务器发送数据。
  3. 设置请求头:可以设置自定义的请求头,进行身份验证、内容类型设置等。
  4. 设置查询参数:用于向服务器传递查询参数,适用于 GET 请求。
  5. 表单数据提交:通过 POST 请求提交表单数据。
  6. 发送 JSON 数据:通过 POST 请求发送 JSON 格式的数据。
  7. 文件上传:通过 POST 请求上传文件到服务器。
  8. 文件下载:通过 GET 请求下载文件并保存到本地。
  9. 获取响应状态码:获取响应的 HTTP 状态码。
  10. 获取响应头:获取服务器返回的响应头。
  11. 基本认证:支持 HTTP 基本认证(用户名和密码)。
  12. 禁用 SSL 证书验证:禁用 SSL 证书验证,适用于开发和测试环境。
import requests  # 导入requests库,用于发送HTTP请求
from requests.exceptions import Timeout, ConnectionError  # 导入可能出现的异常
from requests.auth import HTTPBasicAuth  # 导入HTTP基本认证模块

class HttpRequest:
    def __init__(self):
        self.session = requests.Session()  # 创建一个会话对象,用于保持连接和配置全局设置

    def send_get_request(self, url, headers=None, params=None, timeout=None):
        """
        发送GET请求
        """
        try:
            response = self.session.get(url, headers=headers, params=params, timeout=timeout)  # 发送GET请求并等待响应
            return response.text  # 返回响应的文本内容
        except (Timeout, ConnectionError) as e:
            print(f'Request failed: {e}')  # 捕获超时和连接错误,打印错误信息
            return None  # 请求失败返回None

    def send_post_request(self, url, headers=None, data=None, json=None, timeout=None):
        """
        发送POST请求
        """
        try:
            response = self.session.post(url, headers=headers, data=data, json=json, timeout=timeout)  # 发送POST请求
            return response.text  # 返回响应文本
        except (Timeout, ConnectionError) as e:
            print(f'Request failed: {e}')  # 捕获异常并输出错误信息
            return None  # 请求失败返回None

    def set_custom_headers(self, headers):
        """
        设置自定义请求头
        """
        self.session.headers.update(headers)  # 更新session中的默认请求头为自定义的头部

    def set_query_params(self, params):
        """
        设置查询参数
        """
        self.session.params = params  # 设置查询参数,可以直接在GET请求中使用

    def send_form_data(self, url, data=None, headers=None, timeout=None):
        """
        发送表单数据
        """
        try:
            response = self.session.post(url, data=data, headers=headers, timeout=timeout)  # 发送表单数据的POST请求
            return response.text  # 返回响应的文本内容
        except (Timeout, ConnectionError) as e:
            print(f'Request failed: {e}')  # 捕获异常并打印错误信息
            return None  # 请求失败返回None

    def send_json_data(self, url, json=None, headers=None, timeout=None):
        """
        发送JSON数据
        """
        try:
            response = self.session.post(url, json=json, headers=headers, timeout=timeout)  # 发送JSON数据的POST请求
            return response.text  # 返回响应的文本内容
        except (Timeout, ConnectionError) as e:
            print(f'Request failed: {e}')  # 捕获异常并输出错误信息
            return None  # 请求失败返回None

    def upload_file(self, url, file=None, headers=None, timeout=None):
        """
        上传文件
        """
        try:
            files = {'file': file}  # 使用字典封装文件
            response = self.session.post(url, files=files, headers=headers, timeout=timeout)  # 发送带文件的POST请求
            return response.text  # 返回响应的文本内容
        except (Timeout, ConnectionError) as e:
            print(f'Request failed: {e}')  # 捕获异常并输出错误信息
            return None  # 请求失败返回None

    def download_file(self, url, save_as=None, headers=None, timeout=None):
        """
        下载文件
        """
        try:
            response = self.session.get(url, headers=headers, timeout=timeout)  # 发送GET请求以下载文件
            if save_as:  # 如果指定了保存路径
                with open(save_as, 'wb') as f:  # 以二进制写模式打开文件
                    f.write(response.content)  # 将响应内容写入文件
            return response.text  # 返回响应文本
        except (Timeout, ConnectionError, IOError) as e:
            print(f'Request failed: {e}')  # 捕获网络或文件操作异常并打印错误信息
            return None  # 请求失败返回None

    def get_response_status_code(self, url, headers=None, params=None, timeout=None):
        """
        获取响应状态码
        """
        try:
            response = self.session.get(url, headers=headers, params=params, timeout=timeout)  # 发送GET请求并获取响应
            return response.status_code  # 返回响应的状态码
        except (Timeout, ConnectionError) as e:
            print(f'Request failed: {e}')  # 捕获异常并输出错误信息
            return None  # 请求失败返回None

    def get_response_headers(self, url, headers=None, timeout=None):
        """
        获取响应头
        """
        try:
            response = self.session.get(url, headers=headers, timeout=timeout)  # 发送GET请求并获取响应
            return response.headers  # 返回响应头
        except (Timeout, ConnectionError) as e:
            print(f'Request failed: {e}')  # 捕获异常并输出错误信息
            return None  # 请求失败返回None

    def set_basic_auth(self, url, username, password):
        """
        设置基本认证
        """
        self.session.auth = HTTPBasicAuth(username, password)  # 设置基本认证,传递用户名和密码

    def disable_ssl_certificate_verification(self):
        """
        禁用SSL证书验证
        """
        self.session.verify = False  # 禁用SSL证书验证,适用于开发环境或不安全的请求

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接