IPIPGO ip proxy Python怎么使用代理IP?Requests配置、认证与异常处理教程

Python怎么使用代理IP?Requests配置、认证与异常处理教程

本文封面:Python请求经过代理节点、云服务和服务器环境 Python使用代理IP,核心并不是把一段代理地址放进代码就结束了。真正运行时还要处理认证、超时、连接失败、响应错误和凭证保护。少了其中任何一项,…

Python Requests代理IP教程封面

本文封面:Python请求经过代理节点、云服务和服务器环境

Python使用代理IP,核心并不是把一段代理地址放进代码就结束了。真正运行时还要处理认证、超时、连接失败、响应错误和凭证保护。少了其中任何一项,程序都可能在网络波动时长时间等待,或者把失败结果误当成正常数据。

本文使用常见的Requests库,从安装环境开始,依次讲基础配置、白名单与账密认证、Session复用、异常分类、有限重试和出口检测。代码中的代理地址、用户名、密码与检测地址都是占位内容,需要替换为实际配置。

使用前提:IPIPGO提供国外代理资源,普通国外代理不能直接使用,运行Python程序的本机或云服务器需要先具备海外网络环境。IPIPGO的TikTok专线属于单独产品,可按专线方案直接连接,不适用本文的普通代理代码逻辑。

Python请求经过代理时发生了什么

配置代理后,请求会先到代理节点,再由代理节点转发到目标服务。目标服务看到的是代理出口IP,而不是程序原本的出口IP。Requests负责组织请求和接收响应,代理节点负责改变请求出口,超时、重试和日志仍要由程序处理。

代理不等于加速服务。IPIPGO代理可用于合规的游戏多开环境隔离与防封管理,但不支持游戏加速,也不承诺降低游戏延迟。

Python请求经过代理节点和云服务的链路

请求链路:Python客户端、代理节点、云服务或目标服务器

第一步:安装Requests并准备环境

建议先创建独立虚拟环境,避免新安装的库影响现有项目。在Windows PowerShell中依次执行:

python -m venv .venv
.venvScriptsactivate
python -m pip install requests
python -c "import requests; print(requests.__version__)"

最后一行能输出Requests版本,说明环境已准备好。先确认普通请求能运行,再加入代理参数,更容易判断问题来自Python环境还是代理配置。

安装requests并准备Python测试环境

步骤一:创建虚拟环境、安装Requests并核对版本

第二步:配置基础HTTP代理

Requests通过proxies参数接收代理。即使请求目标使用HTTPS,代理地址本身也常以http开头,具体写法应以提取结果为准,不要擅自修改协议。

import os
import requests

CHECK_URL = os.environ["IP_CHECK_URL"]
PROXY_URL = os.environ["PROXY_URL"]

proxies = {
    "http": PROXY_URL,
    "https": PROXY_URL,
}

response = requests.get(
    CHECK_URL,
    proxies=proxies,
    timeout=(5, 15),
)
response.raise_for_status()
print(response.text)

检测地址和代理地址放在环境变量里,没有直接写进源代码。timeout二元组前一项用于连接阶段,后一项用于等待响应内容。实际时间可按任务调整,但不要完全省略。

Requests配置HTTP代理代码示例

步骤二:同时配置http与https,并设置连接和读取超时

第三步:区分白名单认证与账密认证

Authentication Methods 代理地址结构 检查重点
whitelisting http://主机:端口 运行程序的出口IP已经登记
password authentication http://用户名:密码@主机:端口 凭证正确,特殊字符完成编码

两种方式不要混填。使用白名单认证时,先把本机或云服务器当前出口IP加入白名单;使用账密认证时,把编码后的用户名和密码放入代理地址。

import os
from urllib.parse import quote

user = quote(os.environ["PROXY_USER"], safe="")
password = quote(os.environ["PROXY_PASS"], safe="")
host = os.environ["PROXY_HOST"]
port = os.environ["PROXY_PORT"]

proxy_url = f"http://{user}:{password}@{host}:{port}"

特殊字符必须编码,避免@、英文分隔符或斜线被误认为地址结构。不要打印完整proxy_url,也不要把真实凭证提交到代码仓库。

代理白名单认证与账密认证对比

步骤三:根据白名单认证或账密认证选择正确地址结构

第四步:使用Session复用代理配置

同一任务连续发起多个请求时,可以用requests.Session统一保存代理、请求头和连接配置。

import requests

session = requests.Session()
session.proxies.update({
    "http": proxy_url,
    "https": proxy_url,
})
session.headers.update({"User-Agent": "ProxyClient/1.0"})

try:
    response = session.get(CHECK_URL, timeout=(5, 15))
    response.raise_for_status()
    print(response.text)
finally:
    session.close()

Session复用连接和公共配置,不代表动态代理出口永久不变。出口保持时间由代理产品的会话规则决定,应在提取时选择合适参数。

封装Python代理请求函数示例

步骤四:用Session统一管理代理、请求头和连接

第五步:把异常分开处理

不要用一个except捕获全部错误后直接返回空字符串。认证失败、超时和目标服务错误应该分别记录。

import requests
from requests.exceptions import (
    ConnectTimeout, HTTPError, ProxyError,
    ReadTimeout, RequestException,
)

try:
    response = requests.get(
        CHECK_URL,
        proxies=proxies,
        timeout=(5, 15),
    )
    response.raise_for_status()
except ProxyError as exc:
    print(f"代理连接或认证失败: {exc}")
except (ConnectTimeout, ReadTimeout) as exc:
    print(f"请求超时: {exc}")
except HTTPError as exc:
    print(f"HTTP状态异常: {exc}")
except RequestException as exc:
    print(f"其他请求异常: {exc}")
else:
    print(response.text)

ProxyError优先检查海外网络环境、白名单、代理地址与端口;超时可以结合任务性质做有限重试;HTTPError应根据状态判断,不要一律更换代理;其他异常则保留原信息供排查。

Requests代理异常分类处理

步骤五:连接失败、超时、HTTP错误和其他请求异常分别处理

第六步:只对合适的请求重试

网络抖动造成的连接超时可以短暂重试,但认证失败应先修正配置。带有创建、提交或扣费动作的请求可能产生副作用,不能照搬普通查询请求的重试方案。

import time
from requests.exceptions import ProxyError, Timeout

def get_with_retry(url, proxies, attempts=3):
    last_error = None
    for attempt in range(attempts):
        try:
            response = requests.get(
                url, proxies=proxies, timeout=(5, 15)
            )
            response.raise_for_status()
            return response
        except (ProxyError, Timeout) as exc:
            last_error = exc
            if attempt + 1 < attempts:
                time.sleep(2 ** attempt)
    raise RuntimeError("多次请求仍然失败") from last_error

递增等待能避免失败时连续快速请求。实际项目还应限制总重试时间,并确保日志不记录完整密码或API提取链接。

第七步:验证出口IP和地区

代码返回内容,不代表代理一定生效。正式运行前要调用准备好的出口检测地址,对比配置代理前后的IP,并核对地区是否与提取条件一致。

出口IP已变化、地区匹配、请求能够稳定完成,三项都通过后再扩大规模。若IP没有变化,先检查proxies是否同时包含http和https;若认证失败,再核对白名单或账密。

Python代理出口IP验证步骤

步骤七:核对出口IP、地区与请求结果,三项通过再正式运行

云服务器部署时的注意事项

程序从本机迁移到云服务器后,服务器出口IP通常与本机不同。使用白名单认证时,需要把云服务器当前出口IP加入白名单,不能沿用本机记录。

代理地址和凭证应通过环境变量或密钥管理服务注入;日志只记录脱敏信息;连接超时与读取超时分别设置;上线前先小量运行。多个任务共用配置时,还要避免某个任务的大量重试拖慢其他任务。

服务器环境代理配置检查清单

上线检查:凭证、超时、重试、日志、出口检测与小量运行

common problems

问:配置proxies后,出口IP为什么没有变化?

答:确认proxies中同时配置了http和https,再核对协议、主机、端口及认证方式,最后重新调用出口检测地址。

问:Requests请求一直等待怎么办?

答:为请求设置连接超时和读取超时,不要使用无限重试掩盖网络或认证问题。

问:出现ProxyError就应该更换代理吗?

答:不一定。海外网络环境、白名单、账密、主机或端口填写错误都可能触发该异常,应先核对配置。

问:可以关闭证书校验吗?

答:不建议。关闭校验会削弱连接安全性,也会掩盖实际配置问题,应保留默认校验并修复错误。

问:Session可以固定动态代理出口吗?

答:Session只复用客户端连接与配置。出口保持时间由代理产品的会话规则决定。

summarize

Python接入代理IP可以归纳为六件事:正确构造代理地址、区分认证方式、同时配置HTTP与HTTPS、设置超时、分类处理异常、验证出口IP。代码能跑只是第一步,能够在网络波动和配置变化时给出明确错误,才算真正可维护。

我们的产品仅支持在境外网络环境下使用(除TikTok专线外),用户使用IPIPGO从事的任何行为均不代表IPIPGO的意志和观点,IPIPGO不承担任何法律责任。

business scenario

Discover more professional services solutions

💡 Click on the button for more details on specialized services

IPIPGO-9000万+代理ip资源 限时直降

Professional foreign proxy ip service provider-IPIPGO

Contact Us

Contact Us

13260757327

Online Inquiry. QQ chat

E-mail: hai.liu@xiaoxitech.com

Working hours: Monday to Friday, 9:30-18:30, holidays off
Follow WeChat
Follow us on WeChat

Follow us on WeChat

Back to top
en_USEnglish