使用Python-requests请求Twitter官网与Burp/Curl响应不一致的问题咨询
解决Python requests访问Twitter返回200错误页面的问题
问题分析
你遇到的差异源于Twitter的反爬机制对requests的默认请求特征做了拦截,而Burp/Curl的请求特征更接近浏览器或未被标记为爬虫。即使添加了请求头,requests仍可能因以下原因被拦截:
- 请求头中的转义字符错误(比如你用了
"而非实际的双引号) - requests默认自动处理重定向,可能跳过了关键的302跳转流程
- 缺少会话级Cookie或其他隐式请求参数
解决方案
1. 修正请求头的引号格式
你的Sec-Ch-Ua等字段使用了HTML转义的",导致请求头内容不符合浏览器发送的格式。直接使用双引号(在Python字符串中用单引号包裹):
import requests url = "https://twitter.com/" headers = { 'Host': 'twitter.com', 'Sec-Ch-Ua': '" Not A;Brand";v="99", "Chromium";v="104"', 'Sec-Ch-Ua-Mobile': '?0', 'Sec-Ch-Ua-Platform': '"Windows"', 'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 'Sec-Fetch-Site': 'none', 'Sec-Fetch-Mode': 'navigate', 'Sec-Fetch-User': '?1', 'Sec-Fetch-Dest': 'document', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'en-US,en;q=0.9' }
2. 关闭自动重定向,查看原始响应
requests默认自动跟随重定向(allow_redirects=True),关闭该选项可确认是否能收到原始的302响应:
response = requests.get(url=url, headers=headers, allow_redirects=False) print(response.status_code) print(response.text)
3. 使用Session保持会话
Twitter可能在首次请求时设置必要Cookie,requests.Session()可自动维护Cookie会话,模拟浏览器访问流程:
session = requests.Session() session.headers.update(headers) response = session.get(url, allow_redirects=False) print(response.status_code) print(response.headers.get('Location'))
4. 对比请求的完整特征
查看requests实际发送的请求头,和Burp/Curl的请求做完整对比,找出差异:
print(response.request.headers)
额外提示
若以上方法无效,可补充更多浏览器级请求细节:
- 添加
Connection: keep-alive请求头 - 从Burp中复制初始Cookie到请求头
内容的提问来源于stack exchange,提问作者Shoto
相关产品推荐
相关产品推荐

