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

使用Python Requests登录ING银行遇403 Forbidden错误求助

403 Forbidden when attempting to log into ING account via Python requests

问题描述

我尝试用Python的requests库登录自己的ING银行账户,目的是下载交易记录的CSV文件,但收到了403 Forbidden错误,响应内容如下:

b'\r\n403 Forbidden\r\n\r\n

403 Forbidden
\r\n
ING Webserver
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n'

我的代码如下:

import requests
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
}
with requests.Session() as s:
    url = "https://mijn.ing.nl/login"
    USERNAME = 'username'
    PASSWORD = 'password'
    s.get(url, headers=headers)
    login_data = dict(username=USERNAME, password=PASSWORD, next='/')
    s.post(url, data=login_data, )
    page = s.get('https://mijn.ing.nl/Login', headers=headers)
    print(page.content)

请问我为什么会收到禁止访问的错误?是POST方式不正确,还是其他原因?


分析与解决

这个403错误几乎肯定是因为你的登录请求不符合ING网站的安全验证要求,下面是具体的原因和修复思路:

1. 最核心的问题:缺少CSRF令牌

现代网站几乎都用CSRF(跨站请求伪造)令牌来保护登录等敏感接口。当你用浏览器打开登录页面时,网站会在页面的表单里嵌入一个隐藏的令牌字段(通常叫_csrf、csrf-token或类似名称),同时在Cookie中同步存储对应的值。你必须把这个令牌作为POST数据的一部分提交,否则服务器会直接判定请求非法,返回403。你的代码完全没有处理这个关键参数,这是最主要的原因。

2. 其他可能的问题

  • 登录接口不匹配:你当前POST的URL是登录页面地址,但银行的登录请求往往是提交到专门的API端点(比如/api/auth/login这类),而非直接提交到登录页面。需要用浏览器抓包确认真实的登录接口地址。
  • 缺失必要请求头:除了User-Agent,网站还可能要求Referer(证明你是从登录页面跳转过来的)、Origin、Content-Type等头信息。比如Referer应该设置为登录页面的URL,Content-Type通常需要是application/x-www-form-urlencoded。
  • 反爬机制拦截:作为金融机构,ING的反爬规则非常严格,可能会检测请求顺序、Cookie完整性甚至TLS版本。你的代码虽然用了Session,但可能没有正确保留GET登录页面后生成的所有Cookie,或者请求行为和浏览器差异太大。

3. 具体修复步骤

第一步:用浏览器抓包分析正常登录流程

打开浏览器开发者工具(F12),切换到「网络」标签,勾选「保留日志」,然后手动登录一次ING账户,重点观察:

  • GET登录页面的响应HTML里,表单包含哪些隐藏字段(尤其是CSRF令牌)。
  • POST登录请求的目标URL(不是登录页面地址,而是真实的提交接口)。
  • 正常请求携带的所有请求头(除了Cookie,Session会自动处理)。

第二步:修正代码(示例)

下面是加入CSRF令牌处理的示例代码(假设令牌字段为_csrf,实际以抓包结果为准):

import requests
from bs4 import BeautifulSoup

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
    'Referer': 'https://mijn.ing.nl/login',
    'Content-Type': 'application/x-www-form-urlencoded'
}

with requests.Session() as s:
    login_page_url = "https://mijn.ing.nl/login"
    USERNAME = 'your_username'
    PASSWORD = 'your_password'
    
    # 1. 获取登录页面,提取CSRF令牌
    response = s.get(login_page_url, headers=headers)
    soup = BeautifulSoup(response.content, 'html.parser')
    csrf_token = soup.find('input', {'name': '_csrf'}).get('value')
    
    # 2. 构造完整的登录数据,包含CSRF令牌
    login_data = {
        'username': USERNAME,
        'password': PASSWORD,
        '_csrf': csrf_token,
        'next': '/'
    }
    
    # 3. POST到真实的登录接口(需从抓包中确认)
    login_response = s.post(login_page_url, data=login_data, headers=headers)
    
    # 4. 验证登录是否成功(替换为登录后的页面URL)
    dashboard_page = s.get('https://mijn.ing.nl/overview')
    print(dashboard_page.status_code)
    print(dashboard_page.content)

额外提醒

  • 如果你的ING账户开启了两步验证(比如短信验证码),即使参数正确,后续还需要处理验证码环节,这会大幅增加复杂度。
  • 自动化登录银行账户可能违反银行的服务条款,操作前请务必仔细阅读ING的用户协议,避免账号被封禁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:22:12