使用Cypress访问需VPN的站点时返回403 Forbidden错误如何解决?
Cypress访问需VPN站点返回403的解决方案
问题根因定位
- 先手动验证站点可访问性:开启VPN后在普通浏览器/Postman/curl中直接访问目标URL
https://private-5bdb3-friendmock.apiary-mock.com/friends- 如果无法访问:说明是VPN权限不足或站点本身需要额外身份认证,优先排查VPN和站点权限
- 如果可以正常访问:说明是Cypress没有自动走VPN代理导致请求被拦截
代理配置方案
Cypress的Node进程默认不会自动读取系统全局代理,需要手动指定代理配置才能走VPN通道,有两种常用配置方式:
方式1:启动时临时传入环境变量
根据你的操作系统,在启动Cypress前配置代理环境变量:
- Windows CMD
set HTTP_PROXY=http://127.0.0.1:你的VPN代理端口 set HTTPS_PROXY=http://127.0.0.1:你的VPN代理端口 npx cypress open
- Windows PowerShell
$env:HTTP_PROXY = "http://127.0.0.1:你的VPN代理端口" $env:HTTPS_PROXY = "http://127.0.0.1:你的VPN代理端口" npx cypress open
- Mac/Linux
HTTP_PROXY=http://127.0.0.1:你的VPN代理端口 HTTPS_PROXY=http://127.0.0.1:你的VPN代理端口 npx cypress open
注:如果有无需走代理的内部站点,可以新增NO_PROXY环境变量,值为不需要走代理的域名列表,例如NO_PROXY=localhost,127.0.0.1,internal.test.com
方式2:固定写入Cypress配置文件
在cypress.config.js中直接配置全局代理,无需每次启动传参:
const { defineConfig } = require('cypress') module.exports = defineConfig({ // 替换为你实际的VPN代理地址和端口 proxy: 'http://127.0.0.1:你的VPN代理端口', // 其余原有配置保持不变 e2e: { // ... } })
额外排查项
如果配置代理后仍返回403,检查是否需要补充请求身份信息:
- 对比普通浏览器访问该站点时的请求头,确认是否需要携带
Authorization、Cookie等认证字段,在cy.request中手动传入即可:
cy.request({ method: 'GET', url: 'https://private-5bdb3-friendmock.apiary-mock.com/friends', headers: { // 补充需要的认证头信息 Authorization: 'Bearer 你的身份令牌' } })
- 如果只是临时调试不需要403报错打断测试,可以添加
failOnStatusCode: false参数绕过状态码校验,但该操作仅为调试用,不建议作为最终解决方案。
内容的提问来源于stack exchange,提问作者Manuel
相关产品推荐
相关产品推荐

