Szybka odpowiedź
Jak używać proxy w mieście USA w Pythonie?
Zbuduj URL proxy z bramy i nazwy użytkownika dla miasta, a następnie przekaż go do requests: http://USERNAME-country-us-state-il-city-chicago:[email protected]:7777. Dodaj -zip- dla dzielnicy lub -session-, aby utrzymać jedno IP. MetroProxies obejmuje targetowanie po mieście, ZIP i ASN w każdym planie od 0,50 USD/GB (październik 2026). Bez KYC; krypto.
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"))
Jak ustawić fallback z ZIP do miasta do stanu?
Małe miejscowości mogą w danym momencie nie mieć żadnego IP online. Najpierw spróbuj najwęższego zapytania, rozszerzaj o jeden poziom naraz i zwróć poziom, który odpowiedział, aby zapisać go z wynikiem. Funkcja poniżej robi dokładnie to i rezygnuje po poziomie stanu, zamiast ponawiać w nieskończoność.
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")
Które szczegóły Pythona sprawiają ludziom problem?
- Nowe IP na żądanie:
requests.Session()utrzymuje połączenie otwarte, więc tryb rotacji daje jedno IP na całą sesję. Używaj zwykłych wywołańrequests.get()lub nowegoSessionna każde żądanie, aby rotować. - SOCKS5: zainstaluj
pip install "requests[socks]"i używajsocks5h://, aby nazwy hostów rozwiązywało proxy, a nie twoja maszyna. Port 7778. - Znaki specjalne w haśle: zakoduj je URL-em za pomocą
urllib.parse.quote(password, safe=""). - Timeouty: zawsze ustawiaj; wyjścia rezydencjalne mogą być wolniejsze niż data-center.
- Bądź uprzejmy: utrzymuj umiarkowane tempo żądań do każdej witryny i przestrzegaj robots.txt oraz jej regulaminu.
Gdzie warto zajrzeć dalej?
Zacznij od konfiguracji w pięć minut, porównaj z przykładami Node.js i curl, i utrzymuj IP dzięki sesjom sticky według miasta. Cała dokumentacja: dokumentacja.
O co jeszcze ludzie pytają w kontekście Pythona?
Czy httpx też działa?
Tak. W httpx 0.28 i nowszych przekaż proxy="http://USERNAME-country-us-state-il-city-chicago:[email protected]:7777" do httpx.Client(). Starsze wersje używały argumentu proxies.
Czy te przykłady były uruchamiane na bramie?
Są sprawdzane składniowo za pomocą python -I -m py_compile na Pythonie 3.10+, z USERNAME i PASSWORD jako placeholderami. Uruchom je z własnymi danymi logowania.
Jak uzyskać ASN wyjściowego IP?
Pole org w odpowiedzi ipinfo.io zaczyna się od niego ("AS7922 ..." dla Comcast). Do targetowania po ASN dodaj -asn-7922 do nazwy użytkownika; zobacz targetowanie po ASN.