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

本地运行正常,部署至Vercel等云平台时遇ProxyError(403 Forbidden)问题

解决部署Django视图到云平台后访问ecourts.gov.in出现403代理错误的问题

问题描述

这段获取印度法院系统验证码的Django视图在本地运行正常,但部署至Vercel、PythonAnywhere等云平台时,出现如下错误:

HTTPSConnectionPool(host='services.ecourts.gov.in', port=443): Max retries exceeded with url: /ecourtindia_v4_bilingual/cases/case_no.php?state=D&state_cd=1&dist_cd=23 (Caused by ProxyError('Cannot connect to proxy.', OSError('Tunnel connection failed: 403 Forbidden')))

解决方案

1. 禁用云平台自动代理

部分云平台会自动设置全局代理环境变量,导致requests使用平台代理访问目标网站时被拒绝。可以强制requests不使用代理:

import os
# 清除环境中的代理变量
os.environ.pop('HTTP_PROXY', None)
os.environ.pop('HTTPS_PROXY', None)

@api_view(['GET'])
def get_captcha(request):
    url = 'https://services.ecourts.gov.in/ecourtindia_v4_bilingual/cases/case_no.php?state=D&state_cd=1&dist_cd=23'
    # 发起请求时显式指定空代理
    response = requests.get(url, proxies={'http': None, 'https': None})
    # 后续代码保持不变...

2. 添加模拟浏览器的请求头

目标网站可能会识别非浏览器请求并拦截,添加常见的浏览器请求头可以绕过检测:

@api_view(['GET'])
def get_captcha(request):
    url = 'https://services.ecourts.gov.in/ecourtindia_v4_bilingual/cases/case_no.php?state=D&state_cd=1&dist_cd=23'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
        'Referer': 'https://services.ecourts.gov.in/ecourtindia_v4_bilingual/cases/case_no.php',
        'Accept-Language': 'en-US,en;q=0.9'
    }
    response = requests.get(url, headers=headers, proxies={'http': None, 'https': None})
    # 后续代码保持不变...

3. 使用会话保持请求一致性

目标网站可能依赖会话Cookie验证请求合法性,使用requests.Session()维持会话:

@api_view(['GET'])
def get_captcha(request):
    url = 'https://services.ecourts.gov.in/ecourtindia_v4_bilingual/cases/case_no.php?state=D&state_cd=1&dist_cd=23'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
        'Referer': 'https://services.ecourts.gov.in/ecourtindia_v4_bilingual/cases/case_no.php'
    }
    
    session = requests.Session()
    session.headers.update(headers)
    # 先访问主页获取会话Cookie
    session.get('https://services.ecourts.gov.in/')
    # 再请求验证码页面
    response = session.get(url)
    
    # 后续代码保持不变...

4. 更换出站IP(针对云平台)

如果云平台的共享IP被目标网站封禁:

  • PythonAnywhere:可以联系客服申请更换IP,或使用付费计划的专属IP
  • Vercel:尝试使用Edge Functions部署视图,Edge节点的IP分布更广;或配置自定义域名的IP(需额外服务)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 06:43:29