Python使用requests发送POST请求时如何生成动态请求头?
动态请求头生成解决方案
1. Content-Length 无需手动生成
requests 库会自动根据你传入的 data/json 参数的长度计算并填充 Content-Length 请求头,不需要你手动写死这个字段。手动填写反而会因为 payload 内容变化导致长度不匹配,触发请求错误。
2. Cookie 自动管理方案
使用 requests 内置的 Session 对象即可自动维护 cookie 生命周期,无需手动抓包拼接:
import requests # 初始化会话对象,会自动存储、携带所有服务器返回的cookie session = requests.Session() # 先模拟浏览器首次访问网站首页/登录页,获取初始cookie session.get("https://mywebsite.com", headers=base_headers) # 后续POST请求直接用session.post发起,cookie会自动携带 response = session.post(url=API_ENDPOINT, headers=base_headers, data=payload)
基础请求头中不需要添加 Cookie 字段,Session 会自动处理。
3. Accept 头处理
绝大多数场景下 Accept 头可以直接固定为浏览器的默认值即可,不需要动态生成。如果目标站点确实对 Accept 有动态校验,直接匹配你抓包时同类型接口的 Accept 值固定填写即可。
可用基础请求头示例
你只需要保留以下固定字段即可,动态字段全部交给库自动处理:
base_headers = { "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Accept-Encoding": "gzip, deflate, br", "Accept-Language": "en-US,en;q=0.5", "Connection": "keep-alive", "Content-Type": "application/x-www-form-urlencoded", "Host": "mywebsite.com", "Origin": "https://mywebsite.com", "Referer": "https://mywebsite.com", "Upgrade-Insecure-Requests": "1", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0" }
额外注意
如果发起请求后仍被拦截,大概率是站点还有其他动态校验参数(比如请求签名、动态token等),需要你找到对应参数的前端生成逻辑自行实现。
内容的提问来源于stack exchange,提问作者ushna
相关产品推荐
相关产品推荐

