CodeGym /Kursy /Python SELF PL /Używanie Proxy

Używanie Proxy

Python SELF PL
Poziom 24 , Lekcja 0
Dostępny

6.1 Dlaczego potrzebujesz proxy?

Teraz jest taki czas, kiedy każdy kraj ma swój własny internet. Teraz nie tylko indywidualni użytkownicy są blokowani, ale całe strony, domeny, aplikacje, a nawet kraje. Nie jest to fajne. Ale jeśli jesteś programistą, to nie problem — w internecie jest pełno serwerów proxy...

Serwer proxy (lub po prostu proxy) to pośredni serwer, który działa jako pośrednik między klientem (na przykład twoim komputerem) a serwerem, do którego próbujesz uzyskać dostęp. Serwer proxy przyjmuje zapytania od klienta, przesyła je do docelowego serwera, otrzymuje odpowiedzi i przesyła je z powrotem do klienta.

Każdy duży produkt ma co najmniej kilka serwerów proxy, które pełnią różne użyteczne funkcje. Na przykład takie jak:

  • Anonimizacja: Serwer proxy może ukryć prawdziwy adres IP klienta, zapewniając anonimowy dostęp do zasobów internetowych. Adres IP to unikalny identyfikator urządzenia w sieci, a jego ukrycie pomaga zachować prywatność użytkownika.
  • Cache: Serwer proxy może zachowywać często żądane zasoby, co przyspiesza do nich dostęp i zmniejsza obciążenie zasobów sieciowych. Na przykład, jeśli wielu użytkowników żąda tej samej strony internetowej, serwer proxy może zachować jej kopię i dostarczać ją bezpośrednio, bez kontaktu za każdym razem z oryginalnym serwerem.
  • Filtrowanie treści: Serwer proxy może blokować dostęp do określonych stron internetowych lub typów treści, zapewniając kontrolę i bezpieczeństwo.
  • Omijanie ograniczeń dostępu: Serwer proxy może pomóc omijać regionalne ograniczenia dostępu do treści, zapewniając dostęp do zasobów zablokowanych w określonych obszarach geograficznych.
  • Logowanie i monitorowanie: Serwer proxy może prowadzić dziennik wszystkich zapytań i odpowiedzi, co pozwala monitorować i analizować ruch sieciowy.

Jak działa serwer proxy

  • Klient wysyła zapytanie: Urządzenie klienckie (na przykład komputer lub smartfon) wysyła zapytanie do serwera proxy.
  • Serwer proxy przetwarza zapytanie: Serwer proxy otrzymuje zapytanie, może je zmodyfikować (na przykład, dodać lub usunąć nagłówki) i przesyła je do docelowego serwera.
  • Docelowy serwer odpowiada: Docelowy serwer przetwarza zapytanie i wysyła odpowiedź do serwera proxy.
  • Serwer proxy zwraca odpowiedź klientowi: Serwer proxy otrzymuje odpowiedź z docelowego serwera, może zachować ją w cache na przyszłość i przesłać ją klientowi.

Zalety korzystania z serwera proxy

  • Poprawa bezpieczeństwa: Serwer proxy może ukrywać wewnętrzne sieci przed światem zewnętrznym, zmniejszając ryzyko ataków.
  • Przyspieszenie dostępu: Caching często żądanych zasobów skraca czas dostępu do nich.
  • Kontrola dostępu: Serwer proxy może ograniczać dostęp do określonych stron lub typów treści, zapewniając kontrolę nad wykorzystaniem sieci.
  • Zmniejszenie obciążenia sieci: Dzięki cachingowi i filtrowaniu ruchu serwery proxy mogą zmniejszać całkowitą ilość przesyłanych danych i obciążenie sieci.

Wiele programów serwerowych dla bezpieczeństwa nie ma bezpośredniego dostępu do internetu. Zamiast tego korzystają z proxy, a proxy ma już listę dozwolonych stron i zasobów. Tak więc i twoje programy powinny umieć pracować z proxy.

Mimo wszystkich zalet, korzystanie z serwerów proxy może mieć również wady. Na przykład, może to prowadzić do zmniejszenia szybkości połączenia, ponieważ zapytania przechodzą przez dodatkowe ogniwo. Ponadto, niektóre strony mogą blokować dostęp z znanych serwerów proxy.

6.2 Proxy i moduł requests

Biblioteka requests wspiera użycie serwerów proxy przez parametr proxies.

HTTP (Hypertext Transfer Protocol) i HTTPS (HTTP Secure) to protokoły przesyłania danych w internecie. HTTPS to zabezpieczona wersja HTTP. Do ich obsługi mogą być używane różne serwery proxy, ponieważ mogą wymagać różnego przetwarzania ze względu na cechy szyfrowania HTTPS.

Przykład użycia HTTP proxy

Jako proxy zazwyczaj przesyła się nie jedno proxy, lecz całą listę. To bardzo wygodne, jeśli niektóre z proxy zostaną zablokowane lub będą niedostępne.

Przykład wywołania funkcji requests.get() z przesłaniem zapytania przez proxy.


import requests

# URL, do którego wykonywane jest żądanie
url = 'http://httpbin.org/ip'
            
# Ustawienia serwera proxy
proxies = { 'http': 'http://10.10.1.10:3128', 'https': 'http://10.10.1.10:1080', }
            
# Wysłanie GET-żażdanie przez proxy
response = requests.get(url, proxies=proxies)
            
print(response.json())
        

Żądania http pójdą przez pierwszy serwer proxy, a https przez drugi.

Przykład użycia proxy z uwierzytelnieniem

Wiele serwerów proxy wymaga najpierw przejścia uwierzytelnienia, a potem już pozwala z nich korzystać. Pomoże nam w tym ciekawa rzecz...

Gdy URL został tylko wymyślony, w standardzie URL uwzględniono, że w nim można przekazać od razu login i hasło do zasobu. Wygląda to tak:


http://user:password@domain/path

Dlatego jeśli serwer proxy wymaga uwierzytelnienia, można włączyć dane logowania w URL.

Przykład:


import requests

# URL, do którego wykonywane jest żądanie
url = 'http://httpbin.org/ip'
            
# Ustawienia serwera proxy z uwierzytelnieniem
proxies = { 'http': 'http://user:password@10.10.1.10:3128',
    'https': 'http://user:password@10.10.1.10:1080', }
            
# Wysłanie GET-żażdanie przez proxy
response = requests.get(url, proxies=proxies)
            
print(response.json())
        

Nigdy nie widziałem, żeby praktycznie z tego korzystano, ale jeśli będziesz uruchamiał własny serwer proxy do testów, to czemu nie.

Warto jednak zauważyć, że przekazywanie loginu i hasła w URL może być niebezpieczne, ponieważ URL może być przechowywany w historii przeglądarki lub logach serwera. W prawdziwych aplikacjach należy używać bardziej bezpiecznych metod uwierzytelniania.

Ważne jest pamiętanie o bezpiecznym przechowywaniu danych uwierzytelniających dla serwerów proxy w prawdziwych aplikacjach. Nigdy nie przechowuj haseł w otwartym formacie w kodzie lub plikach konfiguracyjnych. Zamiast tego używaj zmiennych środowiskowych lub bezpiecznych skarbców na tajemnice.

6.3 Proxy i http.client

Aby pracować z serwerami proxy w module http.client, musisz skonfigurować połączenie i nagłówki żądania ręcznie.

Musisz po prostu podać host i port przy tworzeniu połączenia.

Przykład:


# Ustawienia serwera proxy
proxy_host = '10.10.1.10'
proxy_port = 3128
            
# Tworzenie połączenia z serwerem proxy
conn = http.client.HTTPConnection(proxy_host, proxy_port)
        

Następnie musisz ustawić tunel z serwerem proxy, a dopiero potem wysłać do niego żądanie:


dest_url = 'httpbin.org'
dest_path = '/ip'
            
# Tworzenie i wysyłanie żądania
conn.set_tunnel(dest_url)
conn.request('GET', dest_path)
        

Aby sprawdzić, czy serwer proxy działa poprawnie, możesz porównać swój adres IP przed i po użyciu proxy. W tym celu możesz skorzystać z usług pokazujących twój bieżący adres IP, na przykład httpbin.org/ip.

Wszystko jest bardzo "proste". Pełny przykład użycia HTTP proxy z http.client wygląda tak:


import http.client

# Ustawienia serwera proxy
proxy_host = '10.10.1.10'
proxy_port = 3128
dest_url = 'httpbin.org'
dest_path = '/ip'
            
# Tworzenie połączenia z serwerem proxy
conn = http.client.HTTPConnection(proxy_host, proxy_port)
            
# Tworzenie i wysyłanie żądania
conn.set_tunnel(dest_url)
conn.request('GET', dest_path)
            
# Otrzymywanie odpowiedzi
response = conn.getresponse()
print(response.status, response.reason)
print(response.read().decode('utf-8'))
            
# Zamknięcie połączenia
conn.close()
        

Co powiedzieć? Użycie modułu requests jest, oczywiście, łatwiejsze. Ale! Wiele modułów i frameworków korzysta pod spodem właśnie z niskopoziomowego http.client. Musisz wiedzieć, jak z nim pracować, aby móc poprawnie konfigurować ich działanie.

Mimo wszystkich zalet, korzystanie z serwerów proxy może mieć również wady. Na przykład, może to prowadzić do zmniejszenia szybkości połączenia, ponieważ zapytania przechodzą przez dodatkowe ogniwo. Ponadto, niektóre strony mogą blokować dostęp z znanych serwerów proxy. Dlatego przy korzystaniu z proxy zawsze trzeba brać pod uwagę zarówno jego zalety, jak i potencjalne ograniczenia.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION