小红书扫码登录协议分析

小红书扫码登录协议分析实现

JS/爬虫逆向玩转小红书web保姆级教学—二维码登录篇

因为请求头中的x_s参数的原因小红书二维码登录较为特别,与其他网页较为不同,但是流程还是很简单的

一、抓包 

1.1 二维码获取包

POST请求 https://edith.xiaohongshu.com/api/sns/web/v1/login/qrcode/create

表单数据{"qr_type":1}

{
    "code": 0,
    "success": true,
    "msg": "成功",
    "data": {
        "url": "https://www.xiaohongshu.com/mobile/login?qrId=632031729213436637&ruleId=4&xhs_code=384516&timestamp=1729213436662&channel_type=web&component_id=346e2dcf0720e16a82388e1951a2b3c1",
        "multi_flag": 0,
        "qr_id": "632031729213436637",
        "code": "384516"
    }

msg——获取是否成功

url——二维码链接

qr_id——本次二维码登录的id

code——响应码

这个包需要保存的参数是url以及code

1.2、状态获取包 

get请求 https://edith.xiaohongshu.com/api/sns/web/v1/login/qrcode/status?qr_id=632031729213436637&code=384516

利用二维码包的qr_idcode 即可请求成功获取二维码的状态

code_status的意义如下

0——未扫码

1——已扫码,未点击确认登录

2——扫码成功

3——二维码已失效

 扫码成功时,会响应登录的Cookie,注意保存

 扫码成功时的响应

{
    "code": 0,
    "success": true,
    "msg": "成功",
    "data": {
        "code_status": 2,
        "login_info": {
            "session": "040069b3ca26863c3a3104ff24354b1934e0d2",
            "secure_session": "Xad03csession.040069b3ca26863c3a3104ff24354b1934e0d2",
            "user_id": "62be65ce000000001b026a67"
        }
    }
}

二、获取二维码Python代码实现

import requests
import qrcode
def post_request_for_qr(x_s, x_s_common):
    url = "https://edith.xiaohongshu.com/api/sns/web/v1/login/qrcode/create"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:131.0) Gecko/20100101 Firefox/131.0",
        "Accept": "application/json, text/plain, */*",
        "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
        "Accept-Encoding": "gzip, deflate, br, zstd",
        "Content-Type": "application/json;charset=utf-8",
        "X-t": "1729214251341",//时间戳
        "X-s": x_s,
        "X-S-Common": x_s_common,
        "Origin": "https://www.xiaohongshu.com",
        "Referer": "https://www.xiaohongshu.com/",
        "Connection": "keep-alive",
    }
    data = {"qr_type": 1}
    
    # 发送POST请求
    response = requests.post(url, headers=headers, json=data)
    if response.status_code == 200:
        result = response.json()
        if result.get("code") == 0 and result.get("success"):
            qr_url = result['data']['url']
            return qr_url
        else:
            return None
    else:
        return None

# 生成二维码
def generate_qr_code(qr_url):
    if qr_url:
        qr = qrcode.QRCode(
            version=1,
            error_correction=qrcode.constants.ERROR_CORRECT_L,
            box_size=10,
            border=4,
        )
        qr.add_data(qr_url)
        qr.make(fit=True)
        # 生成二维码图像
        img = qr.make_image(fill='black', back_color='white')
        img.show()
    else:
        print("无效的二维码URL")
qr_url = post_request_for_qr("your_x_s_value", "your_x_s_common_value")
generate_qr_code(qr_url)

三、注意事项

在本次扫码登录用到的每一个包都需要以下消息头,我们只需要获取X_sX_S_Commond即可,并且,每次发送POST、GET请求时都需要更新X_s这个参数,X_S_Commond保持不变,这两个参数获取较为复杂,我将会放在本专栏的其他文章,需要的可以看看本专栏的专门获取这两个参数的文章。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小咖拉眯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值