Żywotność: używanie serwerów proxy z bibliotekami klienta interfejsu Google Data API

Jeff Fisher, zespół ds. interfejsów API danych Google
Czerwiec 2007 r.

Wprowadzenie: dlaczego serwer proxy?

Serwer proxy to komputer (lub usługa na komputerze), który wysyła w jego imieniu żądania do wielu komputerów klienckich, zwykle do zasobów zewnętrznych. Ten artykuł dotyczy serwerów proxy HTTP, ponieważ jest to protokół służący do uzyskiwania dostępu do publicznych interfejsów API usług internetowych Google. Żądania HTTPS, które zawierają informacje poufne, takie jak prywatne dane użytkowników lub hasła, są dodatkowo wykorzystywane przez serwery proxy HTTPS lub SSL. Wiele dużych firm używa obecnie serwerów proxy HTTP do kontrolowania witryn, które pracownicy mogą wyświetlać w internecie. Biblioteki publiczne i szkoły często obsługują w tym celu serwery proxy. Istnieją również powszechnie dostępne serwery proxy, których można używać do anonimowego dostępu do treści internetowych.

Potencjalne problemy, które mogą wystąpić podczas korzystania z serwera proxy, zależą od używanego oprogramowania i jego konfiguracji. Serwer proxy jest uważany za przezroczysty, jeśli nie zmienia żądania klienta ani odpowiedzi serwera w żaden inny sposób niż jest to niezbędne do identyfikacji i uwierzytelniania serwera proxy. Jednak duża liczba serwerów proxy zmienia żądanie lub odpowiedź w sposób, o którym deweloper powinien wiedzieć. W szczególności niektóre serwery proxy zmieniają typ treści odpowiedzi lub usuwają nagłówki aktywności HTTP z serwera zewnętrznego hostującego zasób.

Dlaczego deweloper chciałby korzystać z serwera proxy HTTP lub SSL? Zwykle istnieją 2 powody: jest to wymagane przez infrastrukturę firmową lub deweloper chce debugować aplikację, która korzysta z usługi internetowej. Pierwszy powód jest całkowicie niemożliwy, jeśli reguły sieci, nad którą pracuje deweloper, są zabronione. Druga przyczyna jest często zgłaszana na naszych forach pomocy przez deweloperów, którzy próbują rozwiązywać problemy z usługą internetową Google. Istnieją specjalne serwery proxy do debugowania, takie jak Fiddler czy Charles, przygotowane specjalnie na takie sytuacje. Więcej informacji o korzystaniu z serwera proxy znajdziesz w tym artykule.

W przypadku niektórych aplikacji wprowadzenie obsługi serwera proxy może być trudne. Na szczęście większość bibliotek klienckich do obsługi interfejsu Google Data API można wykonać na serwerze proxy HTTP po wprowadzeniu drobnych zmian w kodzie. Ten artykuł jest przeznaczony jako punkt wyjścia dla dewelopera, który chce używać serwera proxy do żądań sieciowych wysyłanych przez jego aplikację.

Java

Korzystanie z serwera proxy HTTP z biblioteką klienta w Javie ułatwia zarządzanie ustawieniami połączenia za pomocą funkcji Sun.

Jeśli na przykład na serwerze 3128 firmowy serwer proxy działał na „my.proxy.domain.com”, przed utworzeniem obiektu usługi dla Kalendarza Google, Arkuszy Google itp. możesz dodać do kodu ten kod:

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

Możesz to też zrobić w wierszu poleceń podczas uruchamiania środowiska serwletu:

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

W nowszych wersjach pakietu JSSE można rozszerzyć zakres o serwery proxy SSL. Jeśli ten sam serwer proxy w poprzednim przykładzie uruchamiał serwer proxy SSL na porcie 3129, potrzebny będzie ten kod:

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

Możesz to też zrobić w wierszu poleceń tak samo jak w przypadku serwera proxy HTTP.

Czasami może być konieczne podanie danych logowania na serwerze proxy, aby można było z niego korzystać. Zazwyczaj są one przesyłane za pomocą skrótu base64 zawartego w nagłówku HTTP w następujący sposób:

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

Ten kod korzysta z pakietu Apache Commons Codec do kodowania w standardzie base64. Aby uruchomić powyższy kod, musisz zaimportować klasę org.apache.commons.codec.binary.Base64.

.NET

Użycie serwera proxy HTTP z biblioteką klienta .NET nie jest tak proste – jak w przypadku klienta Java – ale możesz to osiągnąć w podobny sposób podczas tworzenia obiektu usługi dla konkretnej usługi.

Możemy na przykład użyć serwera proxy do interakcji z usługą Kalendarza Google:

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;

Powinno to wykryć potrzebny serwer proxy z ustawień połączenia internetowego – to przydatna funkcja w bibliotece .NET. Jeśli jednak nie ufasz mu do prawidłowego wykrywania serwera proxy, możesz też ustawić go, zmieniając kod na:

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;

Podsumowanie

Z tego artykułu dowiesz się, jak niektóre biblioteki klienta interfejsu Google Data API współpracują z serwerem proxy HTTP. Deweloperzy pracujący za serwerem proxy, który jest wymagany przez zasady sieciowe, mogą nadal korzystać z tych bibliotek. Deweloperzy mogą również używać serwera proxy, aby ułatwić debugowanie kodu – serwer będzie rejestrować zawartość żądań HTTP i odpowiedzi wysyłanych z usługi internetowej Google. W tym samouczku opisano bardziej zaawansowane przypadki użycia serwera proxy i innych bibliotek klienta. Zachęcamy deweloperów, którzy potrzebują dodatkowej pomocy, do zapoznania się z naszymi publicznymi grupami pomocy, do których linki znajdują się poniżej.

Dodatkowe informacje o bibliotekach klienta używanych w tym artykule znajdziesz na tych stronach:

Inne zasoby: