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

如何在aiohttp中使用HTTPS代理获取HTTPS URL数据?

解决aiohttp使用HTTPS代理的可行方案

嘿,我明白你遇到的困扰了——aiohttp对HTTPS代理的支持确实有点容易踩坑,我来给你几个亲测有效的解决思路:

方案一:用HTTP代理处理HTTPS目标(最简便的尝试)

很多时候,所谓的「HTTPS代理」其实本质是支持CONNECT方法的HTTP代理,完全可以用来访问HTTPS目标。你可以试试把请求里的代理换成HTTP版本的,不管目标URL是http还是https:

async def fetch(url, session):
    # 统一使用HTTP代理处理所有请求
    async with session.get(url, proxy=proxies['http']) as response:
        res_dic = await response.json()
        status = response.status
        print(f"请求状态: {status}")
        return res_dic

loop = asyncio.get_event_loop()
with ClientSession(headers=headers) as session:
    # 注意这里要使用asyncio.gather来批量执行任务
    tasks = [asyncio.ensure_future(fetch(url, session)) for url in urls]
    loop.run_until_complete(asyncio.gather(*tasks))
loop.close()

方案二:使用aiohttp-socks库兼容HTTPS代理

如果方案一无效,推荐用专门的代理扩展库aiohttp-socks,它对各种代理类型(包括HTTPS)的兼容性更好:

  1. 先安装依赖:
pip install aiohttp-socks
  1. 修改代码配置代理:
from aiohttp_socks import ProxyConnector

async def fetch(url, session):
    async with session.get(url) as response:
        res_dic = await response.json()
        status = response.status
        print(f"请求状态: {status}")
        return res_dic

loop = asyncio.get_event_loop()
# 直接用代理URL初始化Connector
connector = ProxyConnector.from_url(proxies['https'])
with ClientSession(headers=headers, connector=connector) as session:
    tasks = [asyncio.ensure_future(fetch(url, session)) for url in urls]
    loop.run_until_complete(asyncio.gather(*tasks))
loop.close()

方案三:通过环境变量配置全局代理

如果需要批量使用代理,也可以通过设置环境变量让aiohttp自动读取代理配置:

import os
import asyncio
from aiohttp import ClientSession

# 设置全局代理环境变量
os.environ['HTTP_PROXY'] = proxies['http']
os.environ['HTTPS_PROXY'] = proxies['https']

async def fetch(url, session):
    async with session.get(url) as response:
        res_dic = await response.json()
        status = response.status
        print(f"请求状态: {status}")
        return res_dic

loop = asyncio.get_event_loop()
# 创建session时开启trust_env,自动读取环境变量代理
with ClientSession(headers=headers, trust_env=True) as session:
    tasks = [asyncio.ensure_future(fetch(url, session)) for url in urls]
    loop.run_until_complete(asyncio.gather(*tasks))
loop.close()

另外注意你原来代码里的一个小问题:loop.run_until_complete(*[...])的写法是错误的,应该用asyncio.gather(*tasks)把所有任务打包后再传给run_until_complete,否则会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 07:22:30