如何计算OAuth请求的device_id与device_token以爬取OLX.pl手机号
解决OLX.pl OAuth请求中device_id和device_token的生成问题
背景
你要爬取OLX.pl的广告手机号,需通过两步API请求获取权限,其中第一步的device_id和device_token是未在HTML源码中暴露的关键参数,这两个字段是OLX用于标识会话/设备的认证项,具体生成方法如下:
1. device_id 生成方式
device_id是标准的UUID v4字符串,格式为8-4-4-4-12的十六进制字符组合(例如a1b2c3d4-5678-90ef-ghij-klmnopqrstuv)。
直接用编程语言生成即可,无需与OLX后端提前校验:
- Python 示例:
import uuid device_id = str(uuid.uuid4()) - JavaScript 示例:
const device_id = crypto.randomUUID();
2. device_token 生成方式
device_token是基于HS256算法签名的JWT令牌,Payload必须包含两个字段:
device_id: 刚才生成的UUID字符串exp: 过期时间戳(建议设置为当前时间+3600秒,即1小时后)
签名使用OLX web端的固定密钥:web-main-secret(可通过浏览器开发者工具分析OLX前端代码确认该密钥)。
Python 生成示例:
import jwt import time import uuid device_id = str(uuid.uuid4()) exp_time = int(time.time()) + 3600 # 1小时后过期 payload = { "device_id": device_id, "exp": exp_time } device_token = jwt.encode(payload, "web-main-secret", algorithm="HS256")
3. 请求验证
将所有参数打包为application/x-www-form-urlencoded格式,POST到https://www.olx.pl/api/open/oauth/token/,参数列表:
client_id: [从广告页面HTML源码提取的client_id] client_secret: [从HTML源码提取的client_secret] grant_type: device scope: i2 read write v2 device_id: [生成的UUID] device_token: [生成的JWT]
请求成功后会返回包含access_token的响应,使用该Token请求/api/v1/offers/{offer_id}/limited-phones/即可获取目标手机号。
内容的提问来源于stack exchange,提问作者Mat
相关产品推荐
相关产品推荐

