You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python传递request变量实现站点登录遇NO_REQUEST_VARIABLE错误求解

问题分析与解决方案

你遇到的核心问题是请求体的编码方式不符合服务器要求。虽然抓包看到的请求体是JSON结构,但因为Content-Type是application/x-www-form-urlencoded,服务器期望的是键值对形式的urlencoded数据,而非纯JSON字符串。你之前的代码可能直接发送了JSON字符串,导致服务器无法解析出request变量,从而返回"NO_REQUEST_VARIABLE"错误。

解决步骤

1. 确认原始请求体格式

先在Firefox抓包工具中切换到「原始」标签,查看实际发送的请求体内容,通常会是以下两种形式之一:

  • 拆分的键值对:request=login&data=%7B%22login%22%3A%22asd%22%2C%22password%22%3A%22asdasd%22%7D
  • 整个JSON作为单个参数值:payload=%7B%22request%22%3A%22login%22%2C%22data%22%3A%7B%22login%22%3A%22asd%22%2C%22password%22%3A%22asdasd%22%7D%7D

2. 调整Requests代码

根据原始请求体格式选择对应的代码:

情况1:拆分键值对格式

import requests

url = "http://IP:PORT/"
# 构造URL参数:键为{"request":"postRequest"},值为空
url_params = {
    '{"request":"postRequest"}': ''
}

# 构造请求体的键值对,data值为JSON字符串
post_data = {
    "request": "login",
    "data": '{"login":"asd","password":"asdasd"}'
}

headers = {
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}

response = requests.post(url, params=url_params, data=post_data, headers=headers)
print(response.text)

情况2:整个JSON作为单个参数

import requests

url = "http://IP:PORT/"
url_params = {
    '{"request":"postRequest"}': ''
}

# 将完整JSON字符串作为某个参数的值
post_data = {
    "payload": '{"request":"login","data":{"login":"asd","password":"asdasd"}}'
}

headers = {
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}

response = requests.post(url, params=url_params, data=post_data, headers=headers)
print(response.text)

3. 额外注意事项

  • 确保URL参数{"request":"postRequest"}=被正确传递,使用params字典可以避免手动编码错误。
  • 如果服务器有验证机制,可能需要添加其他必要请求头(如User-Agent、Cookie等),可以从Firefox抓包结果中复制对应头信息补充到代码里。

内容的提问来源于stack exchange,提问作者roll

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 01:17:37