Python Requests无法读取Payload数据:API爬取商品数据报错
解决Findify API请求报错的方案
问题根源
你遇到的错误核心原因有两个:
- 请求体格式不匹配:当前用
data参数传递payload,会以表单形式发送,但该API要求JSON格式的请求体 - 参数有效性问题:硬编码的
t_client是过期的毫秒时间戳,user里的uid/sid可能已失效
修复步骤
切换请求体格式
把requests.post里的data参数替换为json,requests会自动设置Content-Type: application/json请求头,符合API的接收要求。生成有效
t_client值t_client是客户端当前时间的毫秒级时间戳,用Python实时生成即可,不要用硬编码的旧值。获取真实的
user参数
打开目标网站,在浏览器开发者工具的Application面板中,查看localStorage里的findify_user字段,里面的uid和sid是当前有效的会话标识,替换代码里的硬编码内容。模拟浏览器请求头(推荐)
添加User-Agent头,避免被API识别为非浏览器请求,降低拦截概率。
修复后的代码
import requests import time if __name__ == "__main__": # 从浏览器localStorage获取真实的uid和sid替换下面的值 valid_user = { "uid": "替换为浏览器中的真实uid", "sid": "替换为浏览器中的真实sid", "persist": True, "exist": True } payload = { "user": valid_user, "t_client": int(time.time() * 1000), # 实时生成当前毫秒时间戳 "key": "463dcab6-6df4-4293-969b-745f5f81e10d", "limit": 24, "offset": 24, "filters": [], "q": "" } headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } response = requests.post( "https://api.findify.io/v4/463dcab6-6df4-4293-969b-745f5f81e10d/search", json=payload, headers=headers ) print(response.text)
额外提示
uid和sid是Findify用于用户会话识别的参数,过期或无效会导致请求失败,需要定期从浏览器获取最新值。- 如果仍有报错,对比浏览器中真实请求的Headers,补充代码中缺失的必要请求头(比如
Referer)。
内容的提问来源于stack exchange,提问作者Mohamed Grich
相关产品推荐
相关产品推荐

