Python中requests库实战,GET和POST方法请求头携带token封装方法类编写【Postman工具发送请求,其中请求头Headers携带token】

文章讲述了在Python中如何封装get和post请求,特别是在需要携带token的情况下。通过RequestMethodCarryJson和RequestMethodCarryFormData两个类,分别处理以json和form-data格式传递参数的情况,并展示了getCarryToken方法用于get请求时添加token。同时,文中给出了携带token的get和post请求示例,并分享了踩坑后的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:

实际开发中,Python程序中需要调用后台接口,充当前端,后端规定请求头需要携带token

封装的get和post类:

class RequestMethodCarryJson:
    """
    定义请求类型
    以json方式传递参数
    """

    def __init__(self):

        """初始化参数"""
        self.data = {}
        self.files = {}

    def get(self, url, data, headers):
        """
        定义get方法请求
        :return:
        """
        try:
            return requests.get(url=url, data=data, headers=headers, timeout=60)
        except TimeoutError:
            return print('%s get request timeout!' % url)

    def getCarryToken(self, url, data, headers):
        """
        定义get方法请求
        :return:
        """
        try:
            return requests.get(url=url, json=data, headers=headers, timeout=60)
        except TimeoutError:
            return print('%s get request timeout!' % url)

    def post(self, url, data, headers):
        """
        定义post方法请求
        post携带token,看起来不需要像get那样添加一个getCarryToken特有的识别方法
        :return:
        """
        try:
            return requests.post(url=url, data=json.dumps(data), headers=headers, timeout=60)
        except TimeoutError:
            return print('%s post request timeout!' % url)
class RequestMethodCarryFormData:
    """
    定义请求类型
    以表单方式form-data传递参数
    """

    def __init__(self):

        """初始化参数"""
        self.data = {}
        self.files = {}

    def get(self, url, data, headers):
        """
        定义get方法请求
        :return:
        """
        try:
            return requests.get(url=url, data=data, headers=headers, timeout=60)
        except TimeoutError:
            return print('%s get request timeout!' % url)

    def getCarryToken(self, url, data, headers):
        """
        定义get方法请求,额外添加token
        :return:
        """
        try:
            return requests.get(url=url, json=data, headers=headers, timeout=60)
        except TimeoutError:
            return print('%s get request timeout!' % url)

    def post(self, url, data, headers):
        """
        定义post方法请求
        这个携带json应该不需要额外改
        :return:
        """
        try:
            return requests.post(url=url, data=data, headers=headers, timeout=60)
        except TimeoutError:
            return print('%s post request timeout!' % url)

应用场景:

场景1——get请求时Headers携带token[传递参数以json格式]:

​token="里面填token内容"
test1Info = test1(token)

def test1(token):
    """
    携带token,
    访问平台已经存在的数据库,
    以json格式传递数据
    :param token:
    :return:
    """
    url = "http://127.0.0.1:8088/backup/url1"
    headers = {'Content-Type': 'application/json;charset=utf-8', 'token': token}
    data = dict()
    data["param1"] = "param1"
    data["param2"] = "param2"
    resp = RequestMethodCarryJson().getCarryToken(url, data, headers).json()
    dbInfo = resp["items"]
    return dbInfo

场景2——post请求时Headers携带token[传递参数以application/x-www-form-urlencoded(表单)格式]:

token="里面填token内容"
test2Info = test2(token)

def test2(token):
    url = "http://127.0.0.1:8088/testFormData/json/transfer"
    headers = {'Content-Type': 'application/x-www-form-urlencoded', 'token': token}
    data = dict()
    data["param1"] = "param1"
    """
    这里不接受状态码
    """
    resp = RequestMethodCarryFormData().post(url, data, headers).json()
    info = resp["items"]
    if info == "格式正确":
        return True
    else:
        return False

场景3——踩坑后总结成功的代码:

    """
    请求头携带token拿取信息:
    1-post-以json格式传递数据,请求头携带token成功
    形如:
    # resp = requests.post(url,json=data,headers=headers).json()
    resp = RequestMethodCarryJson().post(url, data, headers).json()


    2-get-以json格式传递数据,请求头携带token成功
    # resp = requests.get(url,json=data,headers=headers).json()
    resp = RequestMethodCarryJson().getCarryToken(url, data, headers).json()

    :param platformInfo:
    :return:
    """

延伸理解:

相关资料参考:

postman中 form-data、x-www-form-urlencoded的区别_叫我峰兄的博客-CSDN博客

python requests 带请求头Token发起http请求_python request token_软件测试李同学的博客-CSDN博客

python发送requests请求时,使用登录的token值,作为下一个接口的请求头信息 - 大海一个人听 - 博客园 (cnblogs.com)

博主更新动力:

欢迎大家点赞、收藏、关注、评论、批评啦 

<think>好的,我现在需要帮助用户了解如何在Pythonrequests中设置请求头,特别是使用requests.post方法。用户之前已经询问过关于numpy的np.mean的问题,现在转向了HTTP请求相关的主题,可能是他们在进行数据处理时需要从API获取数据。 首先,我需要确认用户的需求是什么。他们可能正在尝试发送POST请求,但遇到了需要自定义请求头的情况,比如设置Content-Type、Authorization或者User-Agent等。常见的使用场景包括与REST API交互,提交表单数据,或者模拟浏览器请求。 接下来,我应该回忆requests.post的基本用法。requests.post(url, data=None, json=None, headers=None)中的headers参数就是用来设置请求头的。所以,用户需要知道如何构造headers字典,并传递给这个参数。 然后,我需要考虑用户可能的疑问点。比如,headers格式是否正确,常见的请求头字段有哪些,以及可能出现的错误,比如键名拼写错误或值格式不正确。此外,用户可能不清楚何时需要设置特定的Content-Type,比如application/json与application/x-www-form-urlencoded的区别。 还要考虑用户的使用场景。他们可能在开发Web应用、爬虫,或者自动化脚本,需要与服务器通信。例如,设置User-Agent可以绕过一些简单的反爬机制,或者使用Authorization头进行JWT认证。 另外,用户可能希望看到具体的示例代码,这样更容易理解如何实际操作。需要提供一个清晰的例子,包括构造headers字典,并在post方法中传递它。同时,需要解释每个请求头字段的作用,帮助用户理解为什么需要设置它们。 还需要提到一些注意事项,比如头部字段的大小写通常不敏感,但最好使用标准写法;自定义头部可能需要服务器支持;以及如何处理服务器响应来验证头部是否设置正确。 最后,总结关键点,确保用户能够记住如何正确设置请求头,并鼓励他们通过实践来加深理解,比如打印请求头或检查响应状态。同时,提供进一步学习的建议,比如查阅requests官方文档,或者了解HTTP协议的相关知识。</think>在Python的`requests`中,`requests.post`方法通过`headers`参数设置请求头。以下是具体说明示例: --- ### 一、基本语法 ```python import requests response = requests.post( url="目标URL", data={...}, # 或 json={...} headers={ "Header-Key1": "Value1", "Header-Key2": "Value2", ... } ) ``` --- ### 二、核心步骤 1. **构造请求头字典** 定义包含键值对的字典,键为HTTP头部字段名,值为对应内容: ```python headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)", # 模拟浏览器 "Content-Type": "application/json", # 声明数据格式 "Authorization": "Bearer your_token" # 身份验证 } ``` 2. **传递`headers`参数** 将字典通过`headers`参数传入`requests.post`: ```python response = requests.post( url="https://api.example.com/data", json={"key": "value"}, # 发送JSON数据 headers=headers ) ``` --- ### 三、常见请求头字段 | 字段名 | 作用 | 示例值 | |--------|------|--------| | `User-Agent` | 标识客户端类型 | `"MyApp/1.0"` | | `Content-Type` | 请求体的格式 | `"application/json"`、`"application/x-www-form-urlencoded"` | | `Authorization` | 身份凭证 | `"Bearer abc123"`、`"Basic base64str"` | | `Accept` | 期望的响应格式 | `"application/json"` | | `Cookie` | 会话信息 | `"name=value; name2=value2"` | --- ### 四、完整示例 ```python import requests # 定义请求头数据 headers = { "User-Agent": "MyPythonScript/1.0", "Content-Type": "application/json", "X-Custom-Header": "12345" } data = { "username": "user1", "password": "pass123" } # 发送POST请求 response = requests.post( url="https://api.example.com/login", json=data, headers=headers ) print(response.status_code) print(response.json()) ``` --- ### 五、注意事项 1. **字段名规范** HTTP头部字段名**不区分大小写**,但建议使用标准写法(如`Content-Type`而非`content-type`)。 2. **覆盖默认值** `requests`会自动添加默认头部(如`User-Agent`为`python-requests/版本号`),显式设置会覆盖默认值。 3. **调试方法** 可通过`response.request.headers`查看实际发送请求头: ```python print(response.request.headers) # 输出实际发送的头部 ``` --- ### 六、应用场景 - **反爬虫**:通过设置`User-Agent`伪装成浏览器 - **API鉴权**:使用`Authorization`传递Token - **数据格式协商**:通过`Content-Type``Accept`明确数据格式 建议通过实际请求调试工具(如Postman)抓包观察头部设计,配合代码实践验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员象漂亮

竭诚为您服务!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值