Risposta rapida
Come uso un proxy per città USA in Python?
Costruisci l'URL del proxy dal gateway e da un username con città, poi passalo a requests: http://USERNAME-country-us-state-il-city-chicago:[email protected]:7777. Aggiungi -zip- per un quartiere o -session- per mantenere un solo IP. MetroProxies include il targeting per città, CAP e ASN su ogni piano da 0,50 USD/GB (ottobre 2026). Senza KYC; crypto.
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"))
Come faccio il fallback da CAP a città a stato?
I piccoli centri possono non avere IP online in un dato momento. Prova prima la richiesta più stretta, allarga un livello alla volta e restituisci il livello che ha risposto così puoi salvarlo con il risultato. La funzione qui sotto fa esattamente questo e si ferma dopo il livello stato invece di riprovare all'infinito.
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"))
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")
Quali dettagli Python mettono in difficoltà le persone?
- Nuovo IP per richiesta:
requests.Session()mantiene la connessione aperta, quindi la modalità rotante dà un IP per l'intera sessione. Usa chiamaterequests.get()semplici o un nuovoSessionper ogni richiesta per ruotare. - SOCKS5: installa
pip install "requests[socks]"e usasocks5h://in modo che sia il proxy a risolvere i nomi host, non la tua macchina. Porta 7778. - Caratteri speciali nella password: codificali con URL encoding usando
urllib.parse.quote(password, safe=""). - Timeout: impostane sempre uno; le uscite residenziali possono essere più lente di quelle dei data center.
- Sii rispettoso: mantieni una frequenza di richieste modesta verso ogni sito e segui robots.txt e i suoi termini.
Dove dovrei andare dopo?
Inizia dalla configurazione in cinque minuti, confronta con gli esempi Node.js e curl e mantieni gli IP con le sessioni sticky per città. Tutta la documentazione: documentazione.
Cos'altro chiedono le persone su Python?
Funziona anche httpx?
Sì. In httpx 0.28 e successivi, passa proxy="http://USERNAME-country-us-state-il-city-chicago:[email protected]:7777" a httpx.Client(). Le versioni precedenti usavano un argomento proxies.
Questi esempi sono stati eseguiti tramite il gateway?
Vengono verificati sintatticamente con python -I -m py_compile su Python 3.10+, con USERNAME e PASSWORD come segnaposto. Eseguili con le tue credenziali.
Come ottengo l'ASN dell'IP di uscita?
Il campo org della risposta di ipinfo.io inizia con esso ("AS7922 ..." per Comcast). Per il targeting ASN, aggiungi -asn-7922 all'username; vedi targeting ASN.