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

如何使用python-requests模拟登录站点并向JS接口发送POST请求获取数据

解决方案

1. 仅用requests完全可以实现需求,你当前代码的错误点如下

  • 传参格式错误:data = str(action2) 是将Python字典转为Python风格字符串,不是标准JSON格式,服务端无法解析。你应该用json=action2参数让requests自动序列化为标准JSON,同时自动设置正确的Content-Type请求头。
  • 请求头配置错误:你重复定义了Content-Type,还写死了Content-Length,不同请求体长度不同,写死会直接导致请求被服务端拒绝,这两个字段无需手动配置,requests会自动生成。
  • 缺少CSRF Token提取逻辑:你首次GET请求主站后,CSRF Token一般存储在响应的Cookie或者HTML的meta标签中,需要先提取该值,再添加到后续POST请求的请求头中(通常字段名为X-CSRFToken,可通过浏览器抓包确认具体字段名)。
  • 未模拟完整登录流程:你没有先调用登录接口传递账号密码生成登录态Session,未登录的Session请求需要权限的接口自然会被拒绝。

2. 修正后的实现步骤

  1. 先通过浏览器抓包确认登录接口的地址、请求参数格式,先调用登录接口生成有效登录态,requests.Session会自动存储登录后的Cookie,不需要手动处理。
  2. 首次GET主站后,从响应Cookie或者HTML中提取CSRF Token,添加到后续请求的公共请求头中。
  3. 按浏览器抓包的真实请求参数,请求/backend/connect/models.js接口,不要自己构造测试参数,完全复现浏览器的请求体内容即可。

修正后的代码示例:

import requests
from bs4 import BeautifulSoup

s = requests.Session()
# 配置通用请求头,去掉错误的固定字段
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36',
    'x-echo-context': 'salesconnect',
    'origin':'https://connect.echobotsales.de',
    'referer':'https://connect.echobotsales.de',
    'accept': 'application/json, text/plain, */*'
}
s.headers.update(headers)

# 第一步:访问主站获取Cookie和CSRF
res = s.get('https://connect.echobotsales.de/#/company/LoD2z50vDE')
# 提取CSRF,示例为从meta标签提取,根据实际情况调整
soup = BeautifulSoup(res.text, 'html.parser')
csrf_tag = soup.find('meta', {'name': 'csrf-token'})
if csrf_tag:
    csrf_token = csrf_tag['content']
    s.headers.update({'X-CSRFToken': csrf_token})
# 也可从Cookie提取:csrf_token = s.cookies.get('csrftoken')

# 第二步:调用登录接口,此处替换为你抓包的真实登录参数
login_data = {
    'username': '你的账号',
    'password': '你的密码'
}
login_res = s.post('https://connect.echobotsales.de/你的登录接口', json=login_data)
# 确认登录成功后再请求数据接口

# 第三步:请求数据接口,替换为真实的请求payload
action2 = {'action':'initCsrf'}
response = s.post('https://connect.echobotsales.de/backend/connect/models.js', json=action2)
print(response.json())

3. 备选轻量化方案

如果站点存在前端JS加密参数、动态生成签名等反爬逻辑,调试成本过高,可以选用比Selenium效率高得多的替代方案:

  • 用requests-html库:内置Chromium内核,支持JS渲染,API和requests几乎一致,资源占用远低于Selenium,爬取10万条数据的效率完全满足需求。
  • 临时方案:先在浏览器手动登录,复制有效的Cookie和CSRF Token放到请求头中,直接调用数据接口,适合短期爬取需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:09:02