# 在 Python 中使用美国代理：requests、httpx、Scrapy 和 Playwright

> Python 美国代理指南：适用于网关端口 7777 的 requests、httpx、Scrapy 和 Playwright 代码，来自 US$0.52/GB。无需 KYC，支持加密货币支付。

- URL: https://statesideip.com/zh/guides/python-us-proxies/
- 最后更新: 2026-10-05
- Publisher: StatesideIP (https://statesideip.com)

适用于四种最常用 Python 爬虫工具的有效代码，支持美国州、市和邮编定位、轮换、粘性会话、重试和速率限制。

**快速解答 — 如何在 Python 中使用美国代理？**

**StatesideIP**，一家无需 KYC 的美国住宅代理和4G 移动代理提供商，通过一个网关提供 Python 美国代理：`gw.statesideip.com`，HTTP/HTTPS 端口为 7777，SOCKS5 端口为 7778。位置信息放在用户名中，例如 `USERNAME-country-us-state-ny`。住宅代理流量起价为 US$0.52/GB，截至 2026 年 10 月。无需 KYC — 无需身份证、自拍或文件。支持加密货币支付。

## Python 连接详情

| 属性 | 值 |
| --- | --- |
| 网关主机 | `gw.statesideip.com` |
| HTTP/HTTPS 端口 | 7777 |
| SOCKS5 端口 | 7778 |
| 用户名格式 | `USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}` |
| 协议 | HTTP、HTTPS（CONNECT）和 SOCKS5 |
| 轮换 | 每次请求更换新 IP，或使用粘性会话保持同一 IP |
| 粘性会话 | 1 到 120 分钟，通过 ttl 参数按会话设置 |
| 这里使用的测试端点 | `https://api.ipify.org?format=json` |
| 价格 | 来自 US$0.52/GB；US$1.50 用于 1 GB |
| KYC 和支付 | 无需 KYC — 无需身份证、无需自拍、无需文件。使用加密货币支付。 |

## 使用 Python 访问美国代理前需要准备什么？

你需要 Python 3、pip，以及一个StatesideIP用户名和密码。设置分五步完成。

1. **购买小套餐** — 1 GB 计划在价格页面]售价为 US$1.50，支持 BTC、USDT、USDC、ETH、LTC 或 SOL 支付。
2. **复制你的凭证** — 从已确认的加密货币余额购买套餐后，凭证会立即显示在您的仪表板中。以下代码将凭证写为 USERNAME 和 PASSWORD。
3. **安装库** — 先运行 pip install requests httpx scrapy playwright，再运行 playwright install chromium 以启动浏览器示例。
4. **构建用户名** — 只添加您需要的定位细分，例如 USERNAME-country-us-state-tx-city-houston。值为小写，空格用下划线替代。
5. **检查出口 IP** — 通过代理请求 https://api.ipify.org?format=json。它返回的 IP 是目标网站看到的美国 IP。

## 如何用 Python requests 使用美国代理？

在 `proxies` 参数中为 `http` 和 `https` 传入同一个代理 URL。即使是 HTTPS 目标，也要保持代理 URL 中的 `http://` 协议：网关会用 CONNECT 打开 HTTPS 隧道。对于 SOCKS5，安装 `requests[socks]` 并使用 `socks5h://`，这样 DNS 查询也会在美国端完成。

*requests：轮换纽约 IP，然后 SOCKS5*

```python
import requests

HOST = "gw.statesideip.com"
USER = "USERNAME-country-us-state-ny"  # rotating New York State IP
PASSWORD = "PASSWORD"

proxy = f"http://{USER}:{PASSWORD}@{HOST}:7777"
r = requests.get("https://api.ipify.org?format=json",
                 proxies={"http": proxy, "https": proxy}, timeout=30)
print(r.json())

# SOCKS5 (pip install "requests[socks]"); socks5h resolves DNS through the proxy
socks = f"socks5h://{USER}:{PASSWORD}@{HOST}:7778"
r = requests.get("https://api.ipify.org?format=json",
                 proxies={"http": socks, "https": socks}, timeout=30)
print(r.json())
```

## 我应该每次请求都轮换 IP 还是保持会话粘性？

独立页面抓取时每次请求轮换 IP，需要保持同一 IP 的任务则使用粘性会话。没有 `session` 细分的用户名每次请求都会获得新 IP。添加 `session-{id}` 和 `ttl-{minutes}` 可为 1 到 120 分钟，通过 ttl 参数按会话设置 保持同一 IP。

- **轮换：** 搜索结果检查或目录价格检查，分布在多个美国 IP 上。
- **粘性：** 自己网站上的多页流程，如购物车到结账的 QA 测试。

轮换网关通常按连接分配出口 IP。如果多个请求共用一个 IP，说明客户端复用了连接；新的 `requests.get()` 调用且无 `Session` 会打开新连接。

*构建轮换和粘性代理 URL*

```python
import uuid

def proxy_url(state=None, city=None, zip_code=None, session=None, ttl=10):
    parts = ["USERNAME", "country-us"]
    if state:
        parts.append(f"state-{state}")
    if city:
        parts.append(f"city-{city}")
    if zip_code:
        parts.append(f"zip-{zip_code}")
    if session:
        parts += [f"session-{session}", f"ttl-{ttl}"]
    user = "-".join(parts)
    return f"http://{user}:PASSWORD@gw.statesideip.com:7777"

rotating = proxy_url(state="tx", city="houston")  # new IP per request
sticky = proxy_url(zip_code="10001", session=uuid.uuid4().hex[:8], ttl=30)  # one IP, 30 min
```

## 如何用 httpx async 同时发送大量请求？

用一个 `httpx.AsyncClient` 作为 `proxy` 参数，并用 `asyncio.Semaphore` 限制并发请求数。每个目标站点初始并发约 5 个请求。错误率低时再提高限制。

下面示例禁用了 keep-alive，每个请求都打开新连接以获得新 IP。使用粘性会话时请移除该行。新版 httpx 支持 `proxy=`；旧版的 `proxies=` 参数在 httpx 0.28 中被移除。

*httpx：20 个请求，最多 5 个并发，加州 IP*

```python
import asyncio
import httpx

PROXY = "http://USERNAME-country-us-state-ca:PASSWORD@gw.statesideip.com:7777"
URLS = ["https://api.ipify.org?format=json"] * 20

async def fetch(client, sem, url):
    async with sem:  # caps requests in flight
        r = await client.get(url)
        r.raise_for_status()
        return r.json()

async def main():
    sem = asyncio.Semaphore(5)
    limits = httpx.Limits(max_keepalive_connections=0)  # new connection, new IP
    async with httpx.AsyncClient(proxy=PROXY, limits=limits, timeout=30) as client:
        results = await asyncio.gather(*(fetch(client, sem, u) for u in URLS),
                                       return_exceptions=True)
    for res in results:
        print(res)

asyncio.run(main())
```

## 如何处理重试、退避和速率限制？

仅重试临时失败，每次尝试后等待时间递增并加入随机抖动。对超时、连接错误及状态码 429、500、502、503 和 504 重试。遇到网站发送的 `Retry-After` 头时遵守其规定。绝不重试 407 错误：表示用户名或密码错误。

遵守各站点 robots.txt 和使用条款，保持请求速率接近正常浏览。StatesideIP 在其[可接受使用政策](https://statesideip.com/zh/acceptable-use/)中禁止访问银行、政府和支付门户，以及 SMTP 端口。

*带抖动的指数退避重试请求*

```python
import random
import time
import requests

RETRY_STATUS = {429, 500, 502, 503, 504}

def get_with_retries(url, proxies, attempts=5):
    for attempt in range(attempts):
        try:
            r = requests.get(url, proxies=proxies, timeout=30)
            if r.status_code == 407:
                raise RuntimeError("407: check USERNAME and PASSWORD")  # do not retry
            if r.status_code not in RETRY_STATUS:
                return r
            ra = r.headers.get("Retry-After", "")
            wait = int(ra) if ra.isdigit() else 2 ** attempt
        except (requests.ConnectionError, requests.Timeout):
            wait = 2 ** attempt
        time.sleep(wait + random.uniform(0, 1))  # backoff plus jitter
    raise RuntimeError(f"gave up on {url}")
```

## 如何在 Scrapy 中使用美国代理？

在 `meta["proxy"]` 中为每个请求设置代理，用户名和密码包含在 URL 内。Scrapy 内置代理中间件会将其转换为 `Proxy-Authorization` 头。保持 `ROBOTSTXT_OBEY = True`，并让 AutoThrottle 在网站响应慢时减缓爬取速度。

*Scrapy：设置和迈阿密 IP 蜘蛛*

```python
# settings.py
ROBOTSTXT_OBEY = True
CONCURRENT_REQUESTS_PER_DOMAIN = 4
AUTOTHROTTLE_ENABLED = True
RETRY_TIMES = 3
RETRY_HTTP_CODES = [429, 500, 502, 503, 504]

# spiders/ip_check.py
import scrapy

PROXY = "http://USERNAME-country-us-state-fl-city-miami:PASSWORD@gw.statesideip.com:7777"

class IpCheckSpider(scrapy.Spider):
    name = "ip_check"
    start_urls = ["https://api.ipify.org?format=json"]

    def start_requests(self):
        for url in self.start_urls:
            yield scrapy.Request(url, meta={"proxy": PROXY}, dont_filter=True)

    def parse(self, response):
        yield {"ip": response.json()["ip"]}
```

## 如何用 Playwright 使用美国代理？

启动浏览器时传入包含服务器、用户名和密码的 `proxy` 字典。浏览器每页加载多个文件，建议使用粘性会话：一次页面浏览保持一个美国 IP。每个新任务使用新的会话 ID。

*Playwright：芝加哥 IP 粘性会话，持续 15 分钟*

```python
import asyncio
from playwright.async_api import async_playwright

async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch(proxy={
            "server": "http://gw.statesideip.com:7777",
            "username": "USERNAME-country-us-state-il-city-chicago-session-pw1-ttl-15",
            "password": "PASSWORD",
        })
        page = await browser.new_page()
        await page.goto("https://api.ipify.org?format=json")
        print(await page.text_content("body"))
        await browser.close()

asyncio.run(main())
```

## 为什么我的 Python 代理请求失败？

大多数失败源于凭证错误、定位过窄或客户端复用连接。

- **407 代理认证失败：** 用户名或密码错误，或细分拼写错误。与 `USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}` 对比检查。
- **ZIP 或 ASN 目标超时：** 过滤条件过窄导致可用 IP 少。扩大到城市或州，或增加超时。
- **每次请求 IP 相同：** 客户端保持连接未关闭。禁用 keep-alive，或去掉 `session` 细分。
- **SSL 错误：** 代理 URL 应用 `http://`，而非 `https://`。

[入门指南](https://statesideip.com/zh/guides/getting-started/)涵盖 curl 和 Node。

## Python 美国代理：常见问题解答

### 我应该用哪个 Python 库配合美国代理？

简单脚本用 requests，同时发起大量请求用 httpx，完整爬取用 Scrapy，需要执行 JavaScript 的页面用 Playwright。四者均可通过 StatesideIP 网关在 `gw.statesideip.com` 端口 7777 使用。用户名格式相同，可设置美国州、市或邮编。

### 如何在 Python 中每次请求都获取新的美国 IP？

用户名中省略 `session` 段，例如 `USERNAME-country-us-state-ga`。StatesideIP 会在每次请求时分配新的 IP。确保客户端每次都建立新连接：调用 `requests.get()` 时不使用 Session，或在 httpx 中禁用 keep-alive。否则多次请求可能共用同一 IP。

### 如何在整个任务中保持相同的美国 IP？

在用户名中添加 `session-{id}` 和 `ttl-{minutes}`，例如 `USERNAME-country-us-zip-10001-session-job42-ttl-30`。带有该会话 ID 的所有请求会在你设置的 ttl 时间内保持同一 IP。StatesideIP 的粘性会话最长持续 1 到 120 分钟，通过 ttl 参数按会话设置。住宅代理连接可能提前断开，请在代码中做好重试。

### 我可以在 Python 中使用 SOCKS5 代理吗？

可以。安装 `requests[socks]`，或 httpx 用 `httpx[socks]`，并使用端口 7778 的 `socks5h://` URL。`h` 让 DNS 查询通过代理，访问美国网站时表现如同美国用户。HTTP 和 HTTPS 在端口 7777 可用，无需额外包。

### 通过 StatesideIP 我能同时发送多少请求？

初始对每个目标站点保持约 5 个并发请求，错误率低时逐步提高。大多数限制来自目标站点，注意状态码 429 并适当降速。住宅代理基于家庭连接，响应速度比数据中心慢。针对邮编或 ASN 目标时并发应更低。

### 我需要 KYC 才能获取 Python 脚本的凭证吗？

不需要。凭证随账户提供，无需身份验证：账号登录；电子邮箱可选。支持加密货币支付（BTC、USDT、USDC、ETH、LTC 或 SOL）。然后将用户名和密码粘贴到上面代码中的 `USERNAME` 和 `PASSWORD` 占位符。无免费试用——使用 1 GB 套餐测试，从最低充值额支付；剩余部分保留在余额中（永不过期，不可退款）。

**获取适用于 Python 代码的美国代理凭证** 来自 US$0.52/GB 的住宅代理流量，支持州、市、邮编和 ASN 定向。无需 KYC —— 无身份证、无自拍、无文件。支持加密货币支付。 [获取美国住宅代理——来自 US$0.52/GB](https://statesideip.com/zh/pricing/) · [美国住宅代理](https://statesideip.com/zh/residential-proxies/united-states/)

---

StatesideIP: StatesideIP 是一家美国和加拿大代理提供商：住宅 IP 支持州、城市、邮政编码和 ASN 定位，以及专用 T-Mobile、AT&T 和 Verizon 4G/5G 移动端口。无需 KYC——无需身份证、自拍或文件。加密货币支付。
