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

使用Python发送POST请求调用Mullvad接口返回403错误求助

解决Mullvad登录接口POST请求403错误的方案

核心问题分析

  • 请求格式不匹配:你提到表单采用multipart/form-data格式,但代码中使用data=data参数,requests默认会将其编码为application/x-www-form-urlencoded,与目标格式不符。
  • 缺失CSRF令牌:多数网站会要求CSRF token防止跨站请求伪造,你的请求未携带该参数,直接被服务器拒绝。
  • 请求头与Cookie不完整:除User-Agent和Referer外,还需携带登录页面返回的Cookie,且Referer应指向登录页面而非谷歌搜索结果。

修正后的代码示例

import requests as r
from bs4 import BeautifulSoup

# 初始化会话,自动维持Cookie
session = r.Session()
login_page_url = "https://mullvad.net/fr/account/login"

# 第一步:访问登录页面,获取CSRF token和会话Cookie
response = session.get(login_page_url)
soup = BeautifulSoup(response.text, 'html.parser')
# 从页面隐藏字段中提取CSRF令牌
csrf_token = soup.find('input', {'name': 'csrfmiddlewaretoken'})['value']

# 准备表单数据,包含所有必填字段
form_data = {
    'account_number': '0000000000000000',
    'csrfmiddlewaretoken': csrf_token,
    # 若页面有提交按钮字段,需补充,比如'submit': 'Login',具体看页面源码
}

# 设置正确的请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0',
    'Referer': login_page_url
}

# 发送POST请求,会话自动携带Cookie
response = session.post(login_page_url, data=form_data, headers=headers)

# 若需严格遵循multipart/form-data格式,可改用files参数
# files = {
#     'account_number': (None, '0000000000000000'),
#     'csrfmiddlewaretoken': (None, csrf_token)
# }
# response = session.post(login_page_url, files=files, headers=headers)

print(response.status_code)
print(response.text[:500])  # 查看部分响应内容验证结果

关键注意事项

  • 必须先获取CSRF令牌:直接发送POST请求会被服务器拦截,需先GET登录页面,从HTML源码中提取隐藏的CSRF字段值。
  • 使用Session维持会话:Session会自动保存并携带Cookie,多数网站依赖Cookie跟踪会话状态。
  • 确保表单字段完整:查看登录页面的HTML源码,确认所有必填表单字段都已包含在请求数据中。
  • 控制请求频率:频繁自动化请求可能触发反爬机制,导致IP被封禁,测试时注意请求间隔。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 21:55:57