🎯 一款可定制、具备反检测功能的云浏览器,由自主研发的 Chromium驱动,专为网页爬虫AI 代理设计。👉立即试用
返回博客

如何在Python中使用HTTPX通过代理进行匿名请求

Michael Lee
Michael Lee

Expert Network Defense Engineer

18-Dec-2025
快速浏览

通过Scrapeless代理提升您的自动化和抓取——快速、可靠且实惠。

HTTPX是一个现代化的、功能齐全的Python HTTP客户端,支持同步和异步请求。在进行网络抓取或进行大量API调用时,集成代理是维护匿名性和管理请求量的关键步骤。HTTPX使代理配置变得简单,支持基本和身份验证的设置。

HTTPX中的基本代理配置

HTTPX允许您使用字典定义代理,该字典将协议(http://https://)映射到代理URL。代理URL遵循标准格式:<PROTOCOL>://<IP_ADDRESS>:<PORT>

python Copy
import httpx

# 定义您的代理设置
proxies = {
    "http://": "http://216.137.184.253:80",
    "https://": "http://216.137.184.253:80"
}

# 使用指定代理发起请求
try:
    r = httpx.get("https://httpbin.io/ip", proxies=proxies)
    print(f"响应IP: {r.json().get('origin')}")
except httpx.ProxyError as e:
    print(f"代理连接失败: {e}")

或者,您可以在初始化httpx.Client实例时配置代理,这是一种推荐的做法,适用于向同一目标发起多个请求,因为它重用连接[4]。

python Copy
import httpx

proxy_url = "http://216.137.184.253:80"

with httpx.Client(proxies=proxy_url) as client:
    r = client.get("https://httpbin.io/ip")
    print(f"响应IP: {r.json().get('origin')}")

处理代理身份验证

对于需要用户名和密码的代理,HTTPX支持将凭据直接嵌入到代理URL中。格式为http://<USERNAME>:<PASSWORD>@<IP_ADDRESS>:<PORT>

python Copy
import httpx

# 包含凭据的代理URL
proxy_url = "http://<YOUR_USERNAME>:<YOUR_PASSWORD>@proxy.scrapeless.com:1337"

with httpx.Client(proxies=proxy_url) as client:
    r = client.get("https://httpbin.io/ip")
    print(f"响应IP: {r.json().get('origin')}")

实施代理轮换

为了避免被检测并保持高成功率,您应该轮换代理。这涉及维护一个代理端点列表,并随机选择一个进行每个请求或会话。当与强大的抓取库结合使用时,这尤其有效。

python Copy
import httpx
import random

# 代理URL列表(例如,从您的Scrapeless仪表盘获取)
proxy_urls = [
    "http://user:pass@proxy1.scrapeless.com:10000",
    "http://user:pass@proxy2.scrapeless.com:10001",
    "http://user:pass@proxy3.scrapeless.com:10002",
]

def make_proxied_request(url):
    # 为请求选择一个随机代理
    random_proxy = random.choice(proxy_urls)
    
    # 为客户端配置代理
    proxies = {
        "http://": random_proxy,
        "https://": random_proxy
    }

    try:
        with httpx.Client(proxies=proxies, timeout=10.0) as client:
            response = client.get(url)
            response.raise_for_status()
            return response
    except httpx.RequestError as e:
        print(f"请求{url}时通过代理{random_proxy}发生错误: {e}")
        return None

# 示例用法
response = make_proxied_request("https://targetwebsite.com/data")
if response:
    print(f"成功抓取数据,状态码为: {response.status_code}")

推荐的代理解决方案:Scrapeless 代理

对于高负载、异步抓取与HTTPX,可靠的代理基础设施至关重要。Scrapeless代理专为性能和隐蔽性而设计,提供多样化的IP池,以减少被封锁的风险。他们的住宅静态ISP代理在基于Python的抓取中尤其有效,提供访问复杂目标所需的高信任水平。

常见问题解答 (FAQ)

问: HTTPX 支持 SOCKS 代理吗?
答: 是的,HTTPX 支持 SOCKS 代理。您只需在代理 URL 中指定 SOCKS 协议,例如: socks5://user:pass@ip:port [5].

问: 使用 httpx.Client 代替简单的 httpx.get() 有什么好处?
答: 使用 httpx.Client 允许进行连接池和会话管理,这对于发送多个请求更有效。它还允许您为该客户端会话中进行的所有请求设置默认参数,例如代理。

问: 如何处理 HTTPX 中的代理错误?
答: HTTPX 对网络问题引发特定异常。您应该将请求包裹在 try...except 块中,并捕获 httpx.ProxyError 或更一般的 httpx.RequestError,以实现重试逻辑或切换到不同的代理。

在Scrapeless,我们仅访问公开可用的数据,并严格遵循适用的法律、法规和网站隐私政策。本博客中的内容仅供演示之用,不涉及任何非法或侵权活动。我们对使用本博客或第三方链接中的信息不做任何保证,并免除所有责任。在进行任何抓取活动之前,请咨询您的法律顾问,并审查目标网站的服务条款或获取必要的许可。

最受欢迎的文章

目录