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

如何使用HTTPX与无痕代理:完整指南

Michael Lee
Michael Lee

Expert Network Defense Engineer

24-Nov-2025

今天,我们将学习如何使用 HTTPX 进行代理。代理位于您的抓取程序和您尝试抓取的网站之间。您的抓取程序向代理服务器请求目标网站,代理然后获取目标网站并将其返回给您的抓取程序。

如何使用无身份验证的代理

总的来说,我们的所有请求都是发送到一个 proxy_url。下面是一个使用无身份验证代理的示例。这意味着我们没有使用用户名或密码。

python Copy
import httpx
proxy_url = "http://localhost:8030"
with httpx.Client(proxy=proxy_url) as client:
    ip_info = client.get("https://geo.brdtest.com/mygeo.json")
    print(ip_info.text)

如何使用身份验证的代理

当代理需要用户名和密码时,这被称为“身份验证”代理。这些凭据用于验证您的帐户并为您提供与代理的连接。

在身份验证的情况下,我们的 proxy_url 看起来像这样:http://<username>:<password>@<proxy_url>:<port_number>。在下面的示例中,我们使用我们的 zoneusername 来创建身份验证字符串的用户部分。

我们正在使用 Scrapeless 的住宅代理作为我们的基本连接。

python Copy
import httpx
username = "your-username"
zone = "your-zone-name"
password = "your-password"
proxy_url = f"http://scrapeless-customer-{username}-zone-{zone}:{password}@scrapeless.proxy.io:33335"
ip_info = httpx.get("https://geo.brdtest.com/mygeo.json", proxy=proxy_url)
print(ip_info.text)

上面的代码相当简单。这是您想要设置的任何类型代理的基础。

  • 首先,我们创建我们的配置变量:usernamezonepassword
  • 我们使用这些变量创建我们的 proxy_urlf"http://scrapeless-customer-{username}-zone-{zone}:{password}@scrapeless.proxy.io:33335"
  • 我们向 API 发出请求,以获取有关我们的代理连接的一般信息。

您的响应应类似于以下内容:

json Copy
{"country":"US","asn":{"asnum":20473,"org_name":"AS-VULTR"},"geo":{"city":"","region":"","region_name":"","postal_code":"","latitude":37.751,"longitude":-97.822,"tz":"America/Chicago"}}

如何使用旋转代理

当我们使用旋转代理时,我们创建一个代理列表并从中随机选择。在下面的代码中,我们创建一个 countries 列表。当我们发出请求时,我们使用 random.choice() 从列表中使用一个随机国家。我们的 proxy_url 格式化为适应该国家。

下面的示例创建了一个小的旋转代理列表。

python Copy
import httpx
import asyncio
import random
countries = ["us", "gb", "au", "ca"]
username = "your-username"
proxy_url = "scrapeless.proxy.io:33335"
datacenter_zone = "your-zone"
datacenter_pass = "your-password"
for random_proxy in countries:
    print("----------connection info-------------")
    datacenter_proxy = f"http://scrapeless-customer-{username}-zone-{datacenter_zone}-country-{random.choice(countries)}:{datacenter_pass}@{proxy_url}"
    ip_info = httpx.get("https://geo.brdtest.com/mygeo.json", proxy=datacenter_proxy)
    print(ip_info.text)

这个示例与您的第一个示例没有太大不同。以下是主要区别:

  • 我们创建一个国家数组:["us", "gb", "au", "ca"]
  • 我们不仅仅发出一次请求,而是发出多次请求。每次创建新请求时,我们使用 random.choice(countries) 来选择一个随机国家,以便每次创建我们的 proxy_url

如何创建备用代理连接

在上面的示例中,我们仅使用了数据中心和免费代理。免费代理的可靠性不高。数据中心代理往往在访问更复杂的网站时会被屏蔽。

在这个示例中,我们创建一个名为 safe_get() 的函数。当我们调用这个函数时,我们首先尝试使用数据中心连接来获取 URL。当失败时,我们退回到我们的住宅连接。

python Copy
import httpx
from bs4 import BeautifulSoup
import asyncio
country = "us"
username = "your-username"
proxy_url = "scrapeless.proxy.io:33335"
datacenter_zone = "datacenter_proxy1"
datacenter_pass = "datacenter-password"
residential_zone = "residential_proxy1"
residential_pass = "residential-password"
cert_path = "/home/path/to/scrapeless_proxy_ca/New SSL certificate - MUST BE USED WITH PORT 33335/Scrapeless SSL certificate (port 33335).crt"
datacenter_proxy = f"http://scrapeless-customer-{username}-zone-{datacenter_zone}-country-{country}:{datacenter_pass}@{proxy_url}"
residential_proxy = f"http://scrapeless-customer-{username}-zone-{residential_zone}-country-{country}:{residential_pass}@{proxy_url}"
async def safe_get(url: str):
    async with httpx.AsyncClient(proxy=datacenter_proxy) as client:
        print("trying with datacenter")
        response = await client.get(url)
        if response.status_code == 200:
            soup = BeautifulSoup(response.text, "html.parser")
            if not soup.select_one("form[action='/errors/validateCaptcha']"):
                print("response successful")

返回响应
打印("响应失败")
通过 httpx.AsyncClient(proxy=residential_proxy, verify=cert_path) 作为客户端异步使用:
打印("尝试使用住宅代理")
响应 = 等待客户端.get(url)
打印("响应成功")
返回响应
异步定义主():
url = "https://www.amazon.com"
响应 = 等待安全获取(url)
使用打开("out.html", "w") 作为文件:
文件.write(响应.text)
asyncio.run(主())

Copy
这个例子比我们在本文中处理的其他例子要复杂一些。

- 我们现在有两组配置变量,一组用于数据中心连接,另一组用于住宅连接。
- 这次,我们使用`AsyncClient()`会话来引入 HTTPX 的一些更高级的功能。
- 首先,我们尝试使用`datacenter_proxy`进行请求。
- 如果我们无法获得合理的响应,我们会使用我们的`residential_proxy`重试请求。同时注意代码中的`verify`标志。使用 Scrapeless 的住宅代理时,您需要下载并使用他们的 SSL 证书。
- 一旦我们得到了可靠的响应,就将页面写入 HTML 文件。我们可以在浏览器中打开此页面,查看代理实际访问并返回给我们的内容。

如果您尝试上面的代码,您的输出和生成的 HTML 文件应该看起来很像这样:

尝试使用数据中心代理
响应失败
尝试使用住宅代理
响应成功

Copy
## Scrapeless 代理的帮助

正如您在整个文章中可能注意到的那样,**Scrapeless 提供了一种全面的代理解决方案**,旨在满足现代数据收集需求。拥有超过 9000 万个覆盖 195 个国家的住宅 IP,成功率高达 99.98%,并支持包括网页抓取、市场研究、价格监控、SEO 跟踪、广告验证和品牌保护在内的广泛用例,Scrapeless 是商业和专业数据工作流程的理想选择。

<div style="padding: 20px 0; text-align: center;">
  <a
    style="
      margin: 8px;
      display: inline-block;
      text-decoration: none;
    "
    href="https://www.goproxy.com/register?link=https://app.scrapeless.com/passport/login?utm_source=official&utm_medium=blog-ai&utm_campaign=httpx-with-proxies"
  >
    <div
      style="
        font-weight: bold;
        width: 100%;
        max-width: 400px;
        padding: 12px 40px;
        background: #12A594;
        border-radius: 5px;
        border: 2px solid #12A594;
        color: #fff;
        cursor: pointer;
        box-sizing: border-box;
        font-size: 18px;
      "
    >
      免费试用 &gt;
    </div>
  </a>
</div>

### 住宅代理

拥有超过 9000 万个真实住宅 IP,覆盖 195 个国家,Scrapeless 住宅代理非常适合抓取、市场情报、价格跟踪等。

**主要特性:**
- 自动代理轮换
- 99.98% 的平均成功率
- 精确的地理定位(国家/城市)
- HTTP/HTTPS/SOCKS5 协议
- <0.5s 响应时间
- 优秀的速度和稳定性
- 仅需 **$1.80/GB**

### IPv6 代理

高速度、专用的 IPv6 代理,专为重负载抓取任务设计。

**特性:**
- 支持 HTTP(S) 和 SOCKS5
- 自动 IPv6 代理轮换
- 高匿名性,配备专用 IP
- 5000 万以上的优质 IPv6 池
- 符合 CCPA 和 GDPR
- 按 GB 计费

### 数据中心代理

高性能数据中心 IP,优化用于大规模自动化、批量抓取和大并发。

**特性:**
- 99.99% 的正常运行时间
- 极快的响应时间
- 稳定的长时间会话
- API 访问和简单集成
- 高带宽,低延迟
- 支持 HTTP/HTTPS/SOCKS5

### 静态 ISP 代理

非常适合电子商务账户操作(eBay、PayPal、亚马逊)、长期身份一致性和低封锁风险。

**特性:**
- 真实住宅 IP
- 99.99% 的正常运行时间
- 高接受率和低封禁风险
- 地理定位
- HTTP/HTTPS/SOCKS5 协议

## 结论

当您将 HTTPX 与 Scrapeless 代理结合使用时,您就得到了一个私密、高效和可靠的网络抓取方式。如果您想要轮换代理,使用 Python 的内置 `random` 库就简单得多。通过结合数据中心和住宅代理,您可以建立一个冗余的连接,能够绕过大多数阻挡系统。

正如您所了解的,**Scrapeless 为您的网络抓取项目提供了全面的解决方案**。拥有超过 9000 万个 IP,99.98% 的成功率,以及覆盖 195 个国家,Scrapeless 是满足您所有数据收集需求的理想选择——从网页抓取和市场研究,到价格监控、SEO 跟踪、广告验证和品牌保护。

**立即开始试用 Scrapeless 代理吧!**

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

最受欢迎的文章

目录