Living Vicariously: Using Proxy Servers with the Google Data API Client Libraries

Jeff Fisher, Google Data APIs-Team
Juni 2007

Einführung: Warum ein Proxy?

Ein Proxyserver ist ein Computer (oder ein Dienst auf einem Computer), der Anfragen für eine Reihe von Clientcomputern in deren Namen stellt, in der Regel an externe Ressourcen. In diesem Artikel geht es um HTTP-Proxyserver, da HTTP das Protokoll ist, das für den Zugriff auf die öffentlichen APIs für die Webdienste von Google verwendet wird. HTTPS- oder SSL-Proxys sind auch dann von Interesse, wenn Sie HTTP-Anfragen mit vertraulichen Informationen wie privaten Nutzerdaten oder Passwörtern senden. Viele große Unternehmen verwenden heute HTTP-Proxys, um zu steuern, welche Websites oder Informationen Mitarbeiter im Internet aufrufen können. Auch öffentliche Bibliotheken und Schulen setzen zu diesem Zweck Proxys ein. Es gibt auch eine Reihe öffentlich verfügbarer Proxyserver, die für den anonymen Zugriff auf Webinhalte verwendet werden können.

Mögliche Probleme bei der Verwendung eines Proxyservers hängen davon ab, welche Software verwendet wird und wie sie konfiguriert ist. Ein Proxy gilt als „transparent“, wenn er die Anfrage des Clients oder die Antwort des Servers nur so weit ändert, wie es für die Proxy-Identifizierung und ‑Authentifizierung erforderlich ist. Viele Proxyserver ändern jedoch entweder die Anfrage oder die Antwort auf eine Weise, die Entwickler kennen sollten. Bestimmte Proxys ändern insbesondere den Content-Type der Antwort oder entfernen HTTP-Keep-Alive-Header, die an den externen Server gesendet werden, auf dem die Ressource gehostet wird.

Warum sollte ein Entwickler also einen HTTP- oder SSL-Proxy verwenden? Im Allgemeinen gibt es zwei Gründe dafür: Es ist für einige Unternehmensinfrastrukturen erforderlich oder der Entwickler möchte eine Anwendung debuggen, die einen Webdienst verwendet. Der erste Grund ist völlig unvermeidlich, wenn die Regeln für das Netzwerk, in dem der Entwickler arbeitet, Web- oder SSL-Verbindungen ohne Proxy zu externen Websites verbieten. Der letztgenannte Grund wird häufig in unseren Supportforen von Entwicklern gemeldet, die Probleme mit einem Google-Webdienst beheben möchten. Es gibt spezielle „Debugging“-Proxys wie Fiddler und Charles, die genau für diesen Zweck entwickelt wurden. Weitere Informationen zur Verwendung eines Proxyservers finden Sie im Artikel On the Wire: Tools for API Developers.

Bei einigen Anwendungen kann es schwierig sein, Unterstützung für Proxyserver hinzuzufügen. Glücklicherweise können die meisten Clientbibliotheken für die Google Data API nach einigen geringfügigen Codeänderungen mit einem HTTP-Proxyserver verwendet werden. Dieser Artikel soll als Ausgangspunkt für Entwickler dienen, die einen Proxyserver für die Webanfragen ihrer Anwendung verwenden möchten.

Java

Die Verwendung eines HTTP-Proxys mit der Java-Clientbibliothek ist einfach, da Sun Systemproperties verwendet, um Verbindungseinstellungen zu verwalten.

Wenn Ihr Unternehmensproxyserver beispielsweise auf „meine.proxy.domain.com“ auf Port 3128 ausgeführt wird, können Sie Ihrem Code Folgendes hinzufügen, bevor Sie ein Dienstobjekt für Google Kalender, Google Tabellen usw. erstellen.

System.setProperty("http.proxyHost", "my.proxy.domain.com");
System.setProperty("http.proxyPort", "3128");

Alternativ kann dies beim Starten der Servlet-Umgebung über die Befehlszeile erfolgen:

java -Dhttp.proxyHost=my.proxy.domain.com -Dhttp.proxyPort=3128

In neueren Versionen des JSSE-Pakets kann dies auch auf SSL-Proxys ausgeweitet werden. Wenn auf demselben Proxyserver im vorherigen Beispiel ein SSL-Proxy an Port 3129 ausgeführt würde, wäre der erforderliche Code:

System.setProperty("https.proxyHost", "my.proxy.domain.com");
System.setProperty("https.proxyPort", "3129");

Das ist auch über die Befehlszeile möglich, genau wie beim HTTP-Proxy.

Manchmal müssen Sie Anmeldedaten für einen Proxyserver angeben, um ihn verwenden zu können. Normalerweise werden sie mit einem Base64-Hash übermittelt, der in einem HTTP-Header enthalten ist:

String encoded = new String(Base64.encodeBase64(new String("username:password").getBytes()));
String base64encodedCredentials = "Basic " + encoded;
myService.getRequestFactory().setPrivateHeader("Proxy-Authorization", base64encodedCredentials);

Im obigen Code wird das Paket Apache Commons Codec für die erforderliche Base64-Codierung verwendet. Sie müssen die Klasse org.apache.commons.codec.binary.Base64 importieren, um den oben genannten Code auszuführen.

.NET

Die Verwendung eines HTTP-Proxys mit der .NET-Clientbibliothek ist nicht so einfach wie mit dem Java-Client, kann aber auf ähnliche Weise erfolgen, wenn das Dienstobjekt für ein bestimmtes Produkt erstellt wird.

Wir möchten beispielsweise einen Proxy verwenden, um mit dem Google Kalender-Dienst zu interagieren:

using System.Net;

CalendarService service = new CalendarService("CalendarSampleApp");
query.Uri = new Uri(calendarURI);
GDataRequestFactory requestFactory = (GDataRequestFactory) service.RequestFactory;
IWebProxy iProxy = WebRequest.DefaultWebProxy;
WebProxy myProxy = new WebProxy(iProxy.GetProxy(query.Uri));
// potentially, setup credentials on the proxy here
myProxy.Credentials = CredentialCache.DefaultCredentials;
myProxy.UseDefaultCredentials = true;
requestFactory.Proxy = myProxy;

Dadurch sollte der erforderliche Proxy aus Ihren Internetverbindungseinstellungen erkannt werden – eine praktische Funktion der .NET-Bibliothek. Wenn Sie jedoch nicht darauf vertrauen, dass der Proxy richtig erkannt wird, können Sie ihn auch festlegen, indem Sie den Code in Folgendes ändern:

using System.Net;

CalendarService service = new CalendarService("CalendarSampleApp");
GDataRequestFactory requestFactory = (GDataRequestFactory) service.RequestFactory;
WebProxy myProxy = new WebProxy("http://my.proxy.example.com:3128/",true);
// potentially, setup credentials on the proxy here
myProxy.Credentials = CredentialCache.DefaultCredentials;
myProxy.UseDefaultCredentials = true;
requestFactory.Proxy = myProxy;

Fazit

In diesem Artikel wurde beschrieben, wie einige der Google Data API-Clientbibliotheken mit einem HTTP-Proxyserver verwendet werden können. Entwickler, die hinter einem Proxyserver arbeiten, der durch die Netzwerkrichtlinie vorgeschrieben ist, können diese Bibliotheken weiterhin verwenden. Entwickler können auch einen Proxyserver verwenden, um ihren Code zu debuggen. Der Proxyserver zeichnet dazu den Inhalt von HTTP-Anfragen und ‑Antworten auf, die an einen Google-Webdienst gesendet werden. Es gibt erweiterte Anwendungsfälle für einen Proxyserver und andere Clientbibliotheken, die in dieser Anleitung nicht behandelt werden. Entwickler, die weitere Hilfe benötigen, können sich an unsere öffentlichen Supportgruppen wenden, die unten verlinkt sind.

Weitere Informationen zu den in diesem Artikel verwendeten Clientbibliotheken finden Sie auf den folgenden Seiten:

Weitere Ressourcen: