Lebendig arbeiten: Proxy-Server mit den Google Data API-Clientbibliotheken verwenden

Jeff Fisher, Google Data APIs-Team
Juni 2007

Einführung: Warum Proxy?

Ein Proxyserver ist ein Computer (oder Dienst auf einem Computer), der in seinem Namen Anfragen für eine Reihe von Clientcomputern sendet, in der Regel für externe Ressourcen. Dieser Artikel befasst sich mit HTTP-Proxy-Servern, da HTTP das Protokoll für den Zugriff auf die öffentlichen APIs für die Webdienste von Google ist. HTTPS- oder SSL-Proxys sind ebenfalls von Interesse, wenn sie HTTP-Anfragen mit vertraulichen Informationen wie private Nutzerdaten oder Passwörter stellen. Viele große Unternehmen verwenden HTTP-Proxys, um zu steuern, welche Websites oder Informationen ihre Mitarbeiter im Internet sehen können. Öffentliche Bibliotheken und Schulen sind dafür bekannt, Proxys zu diesem Zweck zu implementieren. Es gibt auch eine Reihe von öffentlich verfügbaren Proxyservern, die für den anonymen Zugriff auf Webinhalte verwendet werden können.

Welche Probleme bei der Verwendung eines Proxyservers auftreten können, hängt von der verwendeten Software und ihrer Konfiguration ab. Ein Proxy wird als „transparent“ betrachtet, wenn er die Anfrage vom Client oder die Antwort des Servers auf keine andere Weise als zur Proxy-Identifikation und -Authentifizierung ändert. Eine große Anzahl von Proxyservern ändert jedoch entweder die Anfrage oder die Antwort in einer Weise, die Entwickler kennen sollten. Insbesondere ändern bestimmte Proxys den Inhaltstyp der Antwort oder entfernen HTTP-Keep-Alive-Header, sodass sie nicht an den externen Server gesendet werden, der die Ressource hostet.

Warum sollte ein Entwickler einen HTTP- oder SSL-Proxy verwenden? Dafür gibt es im Allgemeinen zwei Gründe: Entweder wird der Code von einer Unternehmensinfrastruktur benötigt oder der Entwickler möchte Fehler in einer Anwendung beheben, die einen Webdienst verwendet. Der erste Grund ist vollkommen unvermeidbar, wenn die Regeln für das Netzwerk, in dem der Entwickler arbeitet, keine Web- oder SSL-Verbindungen ohne Proxy zu externen Websites untersagen. Der letzte Grund wird in unseren Supportforen häufig von Entwicklern gemeldet, die versuchen, Probleme mit einem Google-Webdienst zu beheben. Es gibt spezielle Debugging-Proxys wie Fiddler und Charles, die auf genau diese Situation ausgerichtet sind. Weitere Informationen zur Verwendung eines Proxyservers finden Sie in unserem Artikel Wire: Tools für API-Entwickler.

Für einige Anwendungen kann das Hinzufügen der Proxy-Server-Unterstützung schwierig sein. Glücklicherweise lassen sich die meisten Clientbibliotheken für die Google Data API nach ein paar geringfügigen Codeänderungen so konfigurieren, dass sie mit einem HTTP-Proxyserver funktionieren. Dieser Artikel dient als Ausgangspunkt für Entwickler, die einen Proxyserver für die von ihrer Anwendung gesendeten Webanfragen verwenden möchten.

Java

Die Verwendung eines HTTP-Proxys mit der Java-Clientbibliothek ist dank der Nutzung von Systemeigenschaften zur Verwaltung der Verbindungseinstellungen von Sun ganz einfach.

Wenn Ihr stellvertretender Proxyserver beispielsweise auf „my.proxy.domain.com“ und 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 können Sie dies beim Starten Ihrer Servlet-Umgebung in der Befehlszeile tun:

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

Bei neueren Versionen des JSSE-Pakets kann dies auch auf SSL-Proxys erweitert werden. Wenn derselbe Proxy-Server im vorherigen Beispiel einen SSL-Proxy auf Port 3129 ausführt, ist der erforderliche Code:

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

Dies ist auch über die Befehlszeile wie mit dem HTTP-Proxy möglich.

Unter Umständen müssen Sie Anmeldedaten für einen Proxyserver angeben, um ihn zu verwenden. In der Regel werden sie mit einem base64-Hash in einem HTTP-Header gesendet:

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

Beachten Sie, dass der obige Code das Apache Commons Codec-Paket verwendet, um die nötige base64-Codierung durchzuführen. Sie müssen die Klasse org.apache.commons.codec.binary.Base64 importieren, um den obigen Code auszuführen.

.NET

Die Verwendung eines HTTP-Proxys mit der .NET-Clientbibliothek ist nicht so einfach wie der Java-Client, kann aber auf ähnliche Weise beim Erstellen des Dienstobjekts für ein bestimmtes Produkt durchgeführt werden.

Wir können beispielsweise einen Proxy für die Interaktion mit dem Google Kalender-Dienst verwenden:

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;

Damit sollte der erforderliche Proxy in Ihren Einstellungen für die Internetverbindung erkannt werden. Das ist eine Funktion von .NET. Wenn Sie den Proxy jedoch nicht für die korrekte Erkennung erkennen, können Sie ihn auch so ä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 wird erläutert, wie einige Clientbibliotheken der Google Data API mit einem HTTP-Proxyserver funktionieren. Entwickler, die sich hinter einem Proxyserver befinden, der gemäß den Netzwerkrichtlinien vorgeschrieben ist, können diese Bibliotheken weiterhin verwenden. Entwickler können auch einen Proxyserver zur Fehlerbehebung in ihrem Code einsetzen, indem der Proxy-Server den Inhalt von HTTP-Anfragen und -Antworten aufzeichnet, die an und von einem Google-Webdienst gesendet werden. Es gibt komplexere Anwendungsfälle für einen Proxyserver und andere Clientbibliotheken, die in dieser Anleitung nicht behandelt werden. Entwickler, die zusätzliche Hilfe benötigen, können sich an den unten aufgeführten öffentlichen Supportgruppen beteiligen.

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

Weitere Informationen: