无需 KYC — 无需身份证件、无需自拍、无需文档 · 所有套餐均支持按城市、州和 ZIP 定位
语言: 简体中文
开始使用

文档 · Python 3.10+

按美国城市划分的 Python 住宅代理:requests 示例

可直接复制的示例,基于 requests 库,已用 python -m py_compile 做过语法检查。

最后更新:

快速回答

如何在 Python 中使用美国城市代理?

用网关和城市用户名拼出代理 URL,再传给 requests:http://USERNAME-country-us-state-il-city-chicago:[email protected]:7777。加上 -zip- 可指定街区,或用 -session- 保持同一个 IP。MetroProxies 从 US$0.50/GB(2026 年 10 月)起,每个套餐都包含城市、ZIP 和 ASN 定向。无需 KYC;支持加密货币。

1. 从某个城市发一个请求
import requests

user = "USERNAME-country-us-state-il-city-chicago"
proxy = f"http://{user}:[email protected]:7777"

r = requests.get("https://ipinfo.io/json", proxies={"http": proxy, "https": proxy}, timeout=30)
r.raise_for_status()
print(r.json().get("city"), r.json().get("org"))

如何实现从 ZIP 到城市再到州的回退?

小地方在某一时刻可能没有在线 IP。先尝试最窄的请求,逐级放宽,并返回实际响应的层级,以便随结果一起保存。下面的函数正是这样做的,并且在州这一级之后就放弃,而不是无限重试。

2. ZIP → 城市 → 州回退
import requests

GATEWAY = "gw.metroproxies.com:7777"
USER, PASSWORD = "USERNAME", "PASSWORD"


def fetch_local(url: str, state: str, city: str | None = None, zip_code: str | None = None) -> tuple[str, requests.Response]:
    levels = []
    if city and zip_code:
        levels.append(("zip", f"-state-{state}-city-{city}-zip-{zip_code}"))
    if city:
        levels.append(("city", f"-state-{state}-city-{city}"))
    levels.append(("state", f"-state-{state}"))
    last_error: Exception | None = None
    for level, segment in levels:
        proxy = f"http://{USER}-country-us{segment}:{PASSWORD}@{GATEWAY}"
        try:
            r = requests.get(url, proxies={"http": proxy, "https": proxy}, timeout=30)
            r.raise_for_status()
            return level, r
        except requests.RequestException as e:
            last_error = e
    raise RuntimeError(f"no IP at zip, city or state level: {last_error}")


level, resp = fetch_local("https://ipinfo.io/json", "nm", city="albuquerque", zip_code="87102")
print(level, resp.json().get("city"))
3. 用于多步骤检查的粘性会话
import requests

user = "USERNAME-country-us-state-wa-city-tacoma-session-tac01-ttl-15"
proxy = f"http://{user}:[email protected]:7777"

with requests.Session() as s:
    s.proxies = {"http": proxy, "https": proxy}
    first = s.get("https://api.ipify.org", timeout=30).text
    # step 1, step 2 ... on your own site, all from the same Tacoma IP
    second = s.get("https://api.ipify.org", timeout=30).text
    print(first, second, "same IP" if first == second else "IP changed: restart the flow")

Python 有哪些细节容易踩坑?

  • 每个请求换 IP: requests.Session() 会保持连接打开,因此轮换模式在整个会话中只给一个 IP。若要轮换,请使用普通的 requests.get() 调用,或为每个请求新建一个 Session。
  • SOCKS5: 安装 pip install "requests[socks]" 并使用 socks5h://,让代理来解析主机名,而不是你的机器。端口 7778。
  • 密码中的特殊字符: 用 urllib.parse.quote(password, safe="") 进行 URL 编码。
  • 超时: 一定要设置;住宅出口可能比数据中心出口慢。
  • 保持礼貌: 对每个站点的请求频率保持适度,并遵守 robots.txt 及其条款。

接下来该去哪里?

从五分钟快速上手开始,对比 Node.js 和 curl 示例,并用按城市粘性会话保持 IP。全部文档:documentation。

关于 Python,人们还问什么?

httpx 也能用吗?

可以。在 httpx 0.28 及更高版本中,把 proxy="http://USERNAME-country-us-state-il-city-chicago:[email protected]:7777" 传给 httpx.Client()。旧版本使用 proxies 参数。

这些示例是针对网关运行的吗?

它们已用 python -I -m py_compile 在 Python 3.10+ 上做过语法检查,其中 USERNAME 和 PASSWORD 为占位符。请用你自己的凭据运行。

如何获取出口 IP 的 ASN?

ipinfo.io 回复中的 org 字段以它开头(例如 Comcast 的 "AS7922 ...")。如需 ASN 定向,请在用户名后加上 -asn-7922;参见 ASN 定向。

1 GB US$1.50 · 无需 KYC

开始使用