6.1 Warum brauchst du ein Proxy?
Jetzt ist die Zeit, in der jedes Land sein eigenes Internet hat. Nicht nur einzelne Benutzer, sondern ganze Websites, Domains, Apps und sogar Länder stehen nun unter Verboten. Nicht gut. Aber wenn du ein Programmierer bist, ist das kein Problem — es gibt viele Proxy-Server im Internet...
Ein Proxy-Server (oder einfach Proxy) ist ein Zwischenserver, der als Vermittler zwischen dem Client (z.B. deinem Computer) und dem Server fungiert, zu dem du zuzugreifen versuchst. Der Proxy-Server nimmt Anfragen vom Client entgegen, leitet sie an den Zielserver weiter, erhält Antworten und sendet sie zurück an den Client.
Jedes große Produkt hat mindestens ein paar Proxy-Server, die verschiedene nützliche Funktionen erfüllen. Zum Beispiel solche:
- Anonymisierung: Ein Proxy-Server kann die tatsächliche IP-Adresse des Clients verbergen und anonymen Zugriff auf Internetressourcen ermöglichen. Eine IP-Adresse ist eine eindeutige Kennung eines Geräts im Netzwerk, und das Verbergen hilft, die Privatsphäre des Benutzers zu schützen.
- Caching: Ein Proxy-Server kann häufig angeforderte Ressourcen zwischenspeichern, was den Zugriff darauf beschleunigt und die Netzwerkressourcen entlastet. Zum Beispiel, wenn viele Benutzer die gleiche Webseite anfordern, kann der Proxy-Server eine Kopie speichern und sie direkt ausliefern, ohne jedes Mal den Originalserver zu kontaktieren.
- Inhaltsfilterung: Ein Proxy-Server kann den Zugriff auf bestimmte Webseiten oder Arten von Inhalten blockieren, um Kontrolle und Sicherheit zu gewährleisten.
- Umgehung von Zugangsbeschränkungen: Ein Proxy-Server kann helfen, regionale Zugangsbeschränkungen zu umgehen, indem er Zugriff auf Ressourcen bietet, die in bestimmten geografischen Bereichen blockiert sind.
- Protokollierung und Überwachung: Ein Proxy-Server kann alle Anfragen und Antworten protokollieren, um den Netzwerkverkehr zu überwachen und zu analysieren.
Arbeitsweise eines Proxy-Servers
- Der Client sendet eine Anfrage: Das Client-Gerät (z.B. Computer oder Smartphone) sendet eine Anfrage an den Proxy-Server.
- Der Proxy-Server verarbeitet die Anfrage: Der Proxy-Server erhält die Anfrage, kann sie ändern (z.B. Header hinzufügen oder entfernen) und leitet sie an den Zielserver weiter.
- Der Zielserver antwortet: Der Zielserver verarbeitet die Anfrage und sendet die Antwort zurück an den Proxy-Server.
- Der Proxy-Server gibt die Antwort an den Client zurück: Der Proxy-Server erhält die Antwort vom Zielserver, kann sie für zukünftige Verwendung zwischenspeichern und leitet sie an den Client weiter.
Vorteile der Nutzung eines Proxy-Servers
- Verbesserung der Sicherheit: Ein Proxy-Server kann interne Netzwerke vor der Außenwelt verbergen und so das Risiko von Angriffen verringern.
- Beschleunigung des Zugriffs: Das Caching häufig angeforderter Ressourcen verkürzt die Zugriffszeit.
- Zugangskontrolle: Ein Proxy-Server kann den Zugriff auf bestimmte Websites oder Inhalte einschränken und so die Nutzung des Netzwerks überwachen.
- Reduzierung der Netzwerkbelastung: Durch Caching und Filterung des Traffics können Proxy-Server das gesamte Datenvolumen und die Netzwerkbelastung senken.
Viele serverseitige Programme haben aus Sicherheitsgründen keinen direkten Zugang zum Internet. Stattdessen greifen sie über einen Proxy darauf zu, welcher bereits eine Liste von erlaubten Seiten und Ressourcen hat. Daher sollten auch deine Programme in der Lage sein, mit einem Proxy zu arbeiten.
Trotz aller Vorteile kann die Nutzung von Proxy-Servern auch Nachteile haben. Beispielsweise kann dies zu einer Verringerung der Verbindungsgeschwindigkeit führen, da Anfragen über ein zusätzliches Glied laufen. Außerdem können einige Websites den Zugriff von bekannten Proxy-Servern blockieren.
6.2 Proxy und das Modul requests
Die Bibliothek requests
unterstützt die Verwendung von Proxy-Servern über
den Parameter proxies
.
HTTP (Hypertext Transfer Protocol) und HTTPS (HTTP Secure) sind Datenübertragungsprotokolle im Internet. HTTPS ist die sichere Version von HTTP. Für sie können unterschiedliche Proxy-Server verwendet werden, da sie aufgrund der Besonderheiten der HTTPS-Verschlüsselung unterschiedliche Verarbeitung erfordern können.
Beispiel zur Verwendung von HTTP-Proxy
In der Regel übergibt man nicht nur einen Proxy, sondern eine ganze Liste. Das ist sehr praktisch, wenn einige der Proxys gesperrt oder nicht erreichbar sind.
Beispiel für den Aufruf der Funktion requests.get()
mit Weiterleitung der Anfrage über
proxy.
import requests
# URL-Adresse, zu der die Anfrage gesendet wird
url = 'http://httpbin.org/ip'
# Einstellungen des Proxy-Servers
proxies = {
'http': 'http://10.10.1.10:3128',
'https': 'http://10.10.1.10:1080',
}
# Senden einer GET-Anfrage über den Proxy
response = requests.get(url, proxies=proxies)
print(response.json())
HTTP-Anfragen gehen über den ersten Proxy-Server, und HTTPS — über den zweiten.
Beispiel zur Verwendung von Proxy mit Authentifizierung
Viele Proxy-Server erfordern zunächst eine Authentifizierung, bevor sie genutzt werden können. Da kommt uns eine interessante Sache zur Hilfe…
Als die URL das erste Mal eingeführt wurde, wurde im URL-Standard vorgesehen, dass darin sofort Benutzername und Passwort an den Ressourcen übergeben werden können. So sieht das aus:
http://user:password@domain/path
Daher, wenn ein Proxy-Server Authentifizierung benötigt, kann man die Anmeldedaten in der URL inkludieren.
Beispiel:
import requests
# URL-Adresse, zu der die Anfrage gesendet wird
url = 'http://httpbin.org/ip'
# Einstellungen des Proxy-Servers mit Authentifizierung
proxies = {
'http': 'http://user:password@10.10.1.10:3128',
'https': 'http://user:password@10.10.1.10:1080',
}
# Senden einer GET-Anfrage über den Proxy
response = requests.get(url, proxies=proxies)
print(response.json())
Ich habe es noch nicht oft in der Praxis gesehen, aber wenn du deinen eigenen Test-Proxy-Server betreibst, warum nicht.
Es ist jedoch zu beachten, dass die Übertragung von Login und Passwort in der URL unsicher sein kann, da die URL im Browserverlauf oder in den Serverlogs gespeichert werden kann. In realen Anwendungen sollten sicherere Authentifizierungsmethoden verwendet werden.
Es ist wichtig, die Zugangsdaten für Proxy-Server in realen Anwendungen sicher zu verwahren. Speichere niemals Passwörter im Klartext in Code oder Konfigurationsdateien. Verwende stattdessen Umgebungsvariablen oder gesicherte Secrets-Stores.
6.3 Proxy und http.client
Um mit Proxy-Servern im Modul http.client
zu arbeiten, muss die
Verbindung und die Anforderungsheader manuell konfiguriert werden.
Du musst einfach nur host
und
port bei der Erstellung der Verbindung angeben.
Beispiel:
# Einstellungen des Proxy-Servers
proxy_host = '10.10.1.10'
proxy_port = 3128
# Erstellen einer Verbindung mit dem Proxy-Server
conn = http.client.HTTPConnection(proxy_host, proxy_port)
Danach musst du einen Tunnel mit dem Proxy-Server herstellen, und erst dann kannst du ihm eine Anfrage senden:
dest_url = 'httpbin.org'
dest_path = '/ip'
# Erstellen und Senden der Anfrage
conn.set_tunnel(dest_url)
conn.request('GET', dest_path)
Um zu überprüfen, ob der Proxy-Server korrekt funktioniert, kannst du deine IP-Adresse vor und nach der Nutzung des Proxys vergleichen. Dazu kannst du Dienste nutzen, die deine aktuelle IP-Adresse anzeigen, z.B. httpbin.org/ip.
Alles ganz "einfach". Ein vollständiges Beispiel für die Nutzung eines HTTP-Proxy mit
http.client
sieht so aus:
import http.client
# Einstellungen des Proxy-Servers
proxy_host = '10.10.1.10'
proxy_port = 3128
dest_url = 'httpbin.org'
dest_path = '/ip'
# Erstellen einer Verbindung mit dem Proxy-Server
conn = http.client.HTTPConnection(proxy_host, proxy_port)
# Erstellen und Senden der Anfrage
conn.set_tunnel(dest_url)
conn.request('GET', dest_path)
# Empfang der Antwort
response = conn.getresponse()
print(response.status, response.reason)
print(response.read().decode('utf-8'))
# Schließen der Verbindung
conn.close()
Was soll ich sagen? Die Nutzung des Moduls requests
ist natürlich einfacher.
Aber! Viele Module und Frameworks verwenden unter der Haube genau
das Low-Level http.client
. Du musst wissen, wie man damit arbeitet,
damit du sie richtig konfigurieren kannst.
Trotz aller Vorteile kann die Nutzung von Proxy-Servern auch Nachteile haben. Beispielsweise kann dies zu einer Verringerung der Verbindungsgeschwindigkeit führen, da Anfragen über ein zusätzliches Glied laufen. Außerdem können einige Websites den Zugriff von bekannten Proxy-Servern blockieren. Daher sollte man bei der Nutzung von Proxies immer sowohl die Vorteile als auch die potenziellen Einschränkungen berücksichtigen.
GO TO FULL VERSION