使用Python requests发起商品加购请求返回ProdLocked无法获得正确响应
问题排查&解决方案
1. 商品ID拼接错误
你访问商品详情页的商品ID为 DGBJAF-A900962EG,但加购请求的路径中你把ID里的横杠去掉了,拼成了 DGBJAFA900962EG-000,正确的加购商品ID应该保留横杠,为 DGBJAF-A900962EG-000,这是触发 ProdLocked 最直接的原因。
2. 缺少必要的请求头参数
PChome的加购接口会校验 Referer、X-Requested-With 等请求头,仅传User-Agent会被服务器判定为非法爬虫请求,你需要在请求头里补充这两个参数:
'Referer': 'https://24h.pchome.com.tw/prod/DGBJAF-A900962EG?fq=/S/DGCV0M', 'X-Requested-With': 'XMLHttpRequest'
3. 不必要的手动Cookie传递
requests.session() 会自动存储、携带之前请求返回的Cookie,不需要你手动提取Cookie再传入下一个请求,多余的操作反而可能导致Cookie校验失败。
4. 时间戳校验
接口的时间戳参数需要和服务器时间误差不超过30秒,建议先简单校验本地时间是否和网络时间同步。
修正后的代码参考:
import requests import time t = int(round(time.time()*1000)) session = requests.session() # 统一请求头 headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36', 'Referer': 'https://24h.pchome.com.tw/prod/DGBJAF-A900962EG?fq=/S/DGCV0M', 'X-Requested-With': 'XMLHttpRequest' } # 请求商品页获取必要Cookie,session会自动存储 session.get('https://24h.pchome.com.tw/prod/DGBJAF-A900962EG?fq=/S/DGCV0M', headers=headers) # 修正商品ID,补回横杠 snap_up = session.get(f'https://24h.pchome.com.tw/prod/cart/v1/prod/DGBJAF-A900962EG-000/snapup?_{t}', headers=headers) print(snap_up.text)
如果修改后还是返回 ProdLocked,可以再检查商品是否处于限购、无货状态,或者是否需要登录账号后才能加购(你当前的代码没有携带登录态Cookie,部分商品需要登录才能触发加购逻辑)。
内容的提问来源于stack exchange,提问作者k19950907
相关产品推荐
相关产品推荐

