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

使用Requests POST登录网站返回400,如何获取_csrf-app参数?

如何获取并提交fshare.vn登录所需的_csrf-app参数?

这是典型的CSRF(跨站请求伪造)令牌验证问题——网站用这个参数确认请求来自合法的页面访问,而非恶意脚本。要解决这个问题,你需要先访问登录页面提取令牌,再带着它一起提交登录请求,具体步骤如下:

1. 先访问登录页面,获取CSRF令牌

网站的CSRF令牌通常嵌入在登录页面的表单里(一般是隐藏输入框),所以第一步要先用会话对象访问登录页面,拿到页面内容。这里一定要用requests.session()来保持会话,因为登录页面可能会设置必要的Cookie,后续提交请求时需要带上这些Cookie才能通过验证。

2. 解析页面提取_csrf-app参数

用HTML解析库(比如BeautifulSoup)定位到表单里的_csrf-app隐藏输入框,取出它的value值就是我们需要的令牌。

完整代码示例

import requests
from bs4 import BeautifulSoup

# 初始化会话,自动维护Cookie
ssn = requests.session()

# 1. 访问登录页面,获取包含CSRF令牌的页面内容
login_page_url = "https://www.fshare.vn/site/login"
page_response = ssn.get(login_page_url)

# 2. 解析HTML,提取_csrf-app令牌
soup = BeautifulSoup(page_response.text, 'html.parser')
csrf_token = soup.find('input', {'name': '_csrf-app'})['value']

# 3. 准备完整的登录数据,加入CSRF令牌
login_data = {
    "_csrf-app": csrf_token,
    "LoginForm[email]": "gmail@gmail.com",
    "LoginForm[password]": "pw12345",
    "LoginForm[rememberMe]": 0
}

# 4. 提交登录请求
login_response = ssn.post(login_page_url, data=login_data)

# 验证登录结果(可以根据状态码或响应内容判断)
print(f"登录请求状态码: {login_response.status_code}")
# 若需要确认登录后的状态,可以尝试访问需要登录的页面
# test_response = ssn.get("https://www.fshare.vn/my")
# print(test_response.text)

关键点说明

  • 必须使用同一个session对象:它会自动保存登录页面设置的Cookie,确保后续POST请求的会话一致性,避免被服务器判定为非法请求。
  • 如果BeautifulSoup没安装,先执行pip install beautifulsoup4完成安装。
  • 你之前直接POST失败的核心原因就是缺少了这个服务器生成的CSRF令牌——服务器会验证令牌的有效性,只有从当前会话的登录页面获取的令牌才被认可,所以直接构造数据提交会返回400错误。

内容的提问来源于stack exchange,提问作者Hải Phong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:08:23