Python Requests请求在Postman可用,本地及Colab无法运行求助
解决API请求仅在Postman/Kaggle可用,本地/Colab失效的问题
你的问题是目标API请求在Postman和Kaggle能正常返回数据,但本地机器和Colab执行时被拦截,已尝试更换User-Agent但无效。以下是针对性的排查和解决步骤:
1. 排查Cookie的有效性与环境绑定
你代码里的Cookie字段包含Akamai的会话标识(ak_bmsc、bm_sv),这类Cookie通常和请求IP、User-Agent、会话上下文强绑定,Postman里的Cookie是你当时抓包的会话值,换环境后IP或UA不匹配就会失效。
解决操作:
- 先尝试移除
Cookie字段,直接发送请求,看是否能正常返回(部分公开API的Cookie仅用于会话跟踪,不是必填项)。 - 如果必须用Cookie,重新从当前环境的浏览器(本地或Colab的虚拟浏览器)抓最新的Cookie值替换。
修改后的示例代码(移除Cookie):
import requests url = "https://apisae1.phdvasia.com/v1/product-hut-fe/localizations?order_type=C&disposition=C&limit=4" headers = { 'accept': 'application/json, text/plain, */*', 'accept-language': 'en-US,en;q=0.9', 'client': '57950680-0208-4703-9e0b-c5a8cc45cf42', 'lang': 'pt', 'origin': 'https://www.pizzahut.com.br', 'referer': 'https://www.pizzahut.com.br/', 'sec-ch-ua': '"Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"Linux"', # Colab环境改成Linux,本地Windows保留原值 'sec-fetch-dest': 'empty', 'sec-fetch-mode': 'cors', 'sec-fetch-site': 'cross-site', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' # Colab对应Linux UA } response = requests.get(url, headers=headers, allow_redirects=False) print(response.status_code) print(response.text)
2. 匹配请求头的环境细节
服务器可能校验请求头里的环境相关字段:
- 本地Windows环境用
"Windows",Colab是Linux环境,必须把sec-ch-ua-platform改成"Linux",否则会被判定为异常请求。 - 确保
user-agent和sec-ch-ua的版本匹配,比如你的UA是Chrome 113,但sec-ch-ua写的是Chrome 114,这种不一致可能触发反爬。
3. 模拟浏览器的请求流程
Postman会自动处理TLS握手、会话保持等细节,而requests库默认的配置可能不符合服务器要求。可以用requests.Session模拟浏览器的会话流程,先访问目标官网再请求API:
import requests session = requests.Session() # 先访问官网建立会话 session.get("https://www.pizzahut.com.br/") # 再发送API请求 url = "https://apisae1.phdvasia.com/v1/product-hut-fe/localizations?order_type=C&disposition=C&limit=4" headers = { 'accept': 'application/json, text/plain, */*', 'client': '57950680-0208-4703-9e0b-c5a8cc45cf42', 'lang': 'pt', 'referer': 'https://www.pizzahut.com.br/', # 其他必要头信息,去掉可能冲突的Cookie,让Session自动管理 } response = session.get(url, headers=headers, allow_redirects=False) print(response.text)
4. 绕过IP封禁
本地和Colab的IP可能被目标网站的反爬系统拉黑,而Kaggle的IP属于云服务商白名单。可以尝试:
- 使用代理IP(注意选择可靠的代理,避免被检测)
- 在Colab中更换运行时(重启会话获取新IP)
5. 用浏览器自动化工具兜底
如果以上方法都无效,直接用Selenium或Playwright模拟浏览器请求,完全复刻Postman的环境:
以Playwright为例:
from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch() page = browser.new_page() page.goto("https://www.pizzahut.com.br/") # 发送API请求 response = page.request.get("https://apisae1.phdvasia.com/v1/product-hut-fe/localizations?order_type=C&disposition=C&limit=4") print(response.json()) browser.close()
内容的提问来源于stack exchange,提问作者Mohit Sharma
相关产品推荐
相关产品推荐

