Jak używać proxy w Python Requests (HTTP/HTTPS i pooling sesji)
Updated:
Biblioteka requests w języku Python obsługuje uwierzytelniane serwery proxy VinaProxy za pomocą słownika proxies, mapującego schematy 'http' i 'https' na http://user:pass@ip:port. Przypisanie tego słownika do trwałego obiektu requests.Session() pozwala na ponowne wykorzystanie bazowych gniazd TCP, zapewniając szybki web scraping o niskim narzucie.
proxies = {'http': 'http://user:pass@ip:port', 'https': 'http://user:pass@ip:port'}- 1 IP40 000 VND
- 5+ IP35 000 VND
- 10+ IP25 000 VND
- 20+ IP25 000 VND
- 50+ IP25 000 VND
- 100+ IP25 000 VND
- 200+ IP25 000 VND
- 500+ IP25 000 VND
- 1000+ IP22 000 VND
- 2000+ IP20 000 VND
- 1 IP40 000 VND
- 5+ IP35 000 VND
- 10+ IP25 000 VND
- 20+ IP25 000 VND
- 50+ IP25 000 VND
- 100+ IP25 000 VND
- 200+ IP25 000 VND
- 500+ IP25 000 VND
- 1000+ IP22 000 VND
- 2000+ IP20 000 VND
Formatowanie słownika proxies i ponowne użycie sesji
Wywoływanie requests.get() dla każdego adresu URL tworzy za każdym razem całkowicie nowe połączenie TCP i uzgadnianie TLS. Przypisanie proxy do session = requests.Session() utrzymuje tunel proxy otwarty pomiędzy kolejnymi żądaniami.
| Parametr Requests | Zalecana składnia | Cel techniczny |
|---|---|---|
Klucz 'http' | 'http://user:pass@ip:port' | Kieruje zwykłe żądania HTTP przez proxy |
Klucz 'https' | 'http://user:pass@ip:port' | Używa schematu http://, dzięki czemu urllib3 tworzy tunel HTTP CONNECT dla TLS |
Krotka timeout | timeout=(5, 15) | 5 s na połączenie i 15 s na odczyt zapobiega zawieszaniu się wątków roboczych |
| Rotacja puli | itertools.cycle(proxy_list) | Cyklicznie i równomiernie przechodzi przez dedykowaną pulę statycznych adresów IP |
Unikanie typowych pułapek związanych z urllib3 i ProxyError
- Zawsze używaj
http://(a niehttps://) jako schematu URL proxy dla obu kluczy słownika ('http'i'https'), chyba że Twój port proxy wyraźnie wymaga protokołu TLS-over-TLS - Koduj znaki specjalne w haśle do formatu URL za pomocą
urllib.parse.quote(password, safe='') - Błąd
407 Proxy Authentication Requiredoznacza, że nazwa użytkownika lub hasło w ciągu URL nie zgadzają się z danymi logowania w panelu - Działa identycznie z
httpx.Client(proxy='http://user:pass@ip:port')orazaiohttpsession.get(url, proxy=...)
Krok po kroku
- 1
Przekonwertuj format ip:port:user:pass na składnię URL
Skorzystaj z naszego narzędzia Proxy Format Converter, aby przekształcić listę z VinaProxy na ciągi
http://user:pass@ip:port. - 2
Zdefiniuj słownik proxies
Ustaw
proxies = {'http': 'http://user:pass@ip:port', 'https': 'http://user:pass@ip:port'}w swoim skrypcie Python. - 3
Dołącz do instancji requests.Session()
Zainicjalizuj
s = requests.Session()i wywołajs.proxies.update(proxies)w celu trwałego poolingu połączeńKeep-Alive. - 4
Zweryfikuj wyjściowy adres IP żądaniem testowym
Uruchom
print(s.get('https://vinaproxy.com/api/my-ip', timeout=10).json()), aby potwierdzić aktywny adres IP proxy.
Często zadawane pytania
Dlaczego klucz 'https' używa 'http://user:pass@ip:port'?
Prefiks http:// informuje bibliotekę urllib3, w jaki sposób połączyć się z samym serwerem proxy (przy użyciu standardowej metody HTTP CONNECT), podczas gdy cały ruch end-to-end do docelowej witryny https:// pozostaje w pełni zaszyfrowany przez TLS.
Jak rotować 25 statycznych proxy między żądaniami w Pythonie?
Załaduj 25 adresów URL proxy do pool = itertools.cycle(PROXIES) i przekazuj proxies={'http': p, 'https': p} dla każdego żądania, stosując odpowiednie limity zapytań na pojedynczy adres IP.
Czy VinaProxy limituje transfer w skryptach scrapingu w Pythonie?
Nie. Wszystkie plany Dedicated IPv4 i Static ISP zawierają nielimitowany miesięczny transfer.
Zbuduj nielimitowaną pulę proxy do scrapingu w Pythonie
Błyskawicznie dostępne proxy Dedicated IPv4 i Static ISP w 7 krajach.
Kup proxy do Pythona