如何用Python发送带payload的POST请求,获取与浏览器一致的接口返回数据
解决方法
你遇到的问题主要是请求体格式错误、缺少必要请求头和Cookie导致的,按以下步骤调整即可:
- 请求体格式修正:
requests.post传data参数时默认发送表单格式数据,该接口需要接收JSON格式,改为使用json关键字传参即可
- 请求体格式修正:
- 补充模拟浏览器的请求头:至少需要添加
User-Agent避免被服务器识别为爬虫拦截
- 补充模拟浏览器的请求头:至少需要添加
- 加入你从浏览器获取的Cookie,替换代码中对应位置的Cookie值即可
- 可先打印响应状态码排查请求是否被服务器正常接收,避免直接打印内容无法定位错误
调整后的参考代码如下:
import requests url = "https://flight-api-v1.utravs.com/Flight/statistic/FlightPriceStatistics" request_data = { "minimumPriceStatisticRequest": { "$id": 1, "availabilityRequest": { "$id": 2, "segments": { "$id": 3, "$values": [ { "$id": 4, "destination": "KIH-Kish-all", "origin": "THR-Tehran-all", "departureDateTime": "2021-12-02T00:00:00.000Z", "uniqueIndex": 0 } ] }, "passengers": { "$id": 5, "$values": [ { "$id": 6, "type": 1, "quantity": 1, "optionalServices": { "$id": 7, "$values": [] } } ] }, "travelDetails": { "$id": 8, "cabinType": 1, "airTripType": 1, "stopQuantityType": 3, "pricingSourceType": 3 }, "availabilityType": 0 }, "minRange": 10, "maxRange": 10 } } # 替换为你自己从浏览器请求中复制的请求头和Cookie headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", "Cookie": "你从浏览器第二张截图里复制的完整Cookie字符串" } response = requests.post(url, json=request_data, headers=headers, timeout=30) # 先查看响应状态码,200为请求正常,4xx/5xx分别对应客户端和服务端错误 print("响应状态码:", response.status_code) print("返回内容:", response.text)
注意:如果仍然返回错误,可从浏览器的请求头里复制Origin、Referer字段补充到headers字典中;另外Cookie存在有效期,过期后需要重新从浏览器获取;示例中的查询日期为2021年,若要查询最新数据请替换为对应日期。
内容的提问来源于stack exchange,提问作者Rahman
相关产品推荐
相关产品推荐

