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

Jeff Fisher, zespół interfejsów API Google Data
czerwiec 2007 r.

Wprowadzenie: dlaczego warto korzystać z serwera proxy?

Serwer proxy to komputer (lub usługa na komputerze), który w imieniu wielu komputerów klienckich wysyła żądania, zwykle do zasobów zewnętrznych. Ten artykuł dotyczy serwerów proxy HTTP, ponieważ HTTP to protokół używany do uzyskiwania dostępu do publicznych interfejsów API usług internetowych Google. W przypadku żądań HTTP zawierających informacje poufne, takie jak prywatne dane użytkowników lub hasła, przydatne są też serwery proxy HTTPS lub SSL. Wiele dużych firm korzysta obecnie z serwerów proxy HTTP, aby kontrolować, jakie witryny lub informacje mogą wyświetlać pracownicy w internecie. Biblioteki publiczne i szkoły również stosują w tym celu serwery proxy. Istnieje też wiele publicznie dostępnych serwerów proxy, które można wykorzystać 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 sposobu jego konfiguracji. Serwer proxy jest uważany za „przezroczysty”, jeśli nie zmienia żądania klienta ani odpowiedzi serwera w żaden sposób inny niż jest to konieczne 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ć. Niektóre serwery proxy zmieniają typ treści odpowiedzi lub usuwają nagłówki HTTP keep-alive, które mają być wysyłane do zewnętrznego serwera hostującego zasób.

Dlaczego więc deweloperzy chcą używać serwera proxy HTTP lub SSL? Zwykle są 2 powody takiego postępowania: jest to wymagane przez infrastrukturę korporacyjną lub deweloper chce debugować aplikację, która korzysta z usługi internetowej. Pierwszy powód jest całkowicie nieunikniony, jeśli zasady sieci, w której pracuje deweloper, zabraniają połączeń internetowych lub SSL bez serwera proxy z zewnętrznymi witrynami. Ten drugi powód jest często zgłaszany na naszych forach pomocy przez deweloperów, którzy próbują rozwiązać problemy podczas korzystania z usługi internetowej Google. Istnieją specjalne narzędzia proxy do debugowania, takie jak FiddlerCharles, które są przeznaczone do tego celu. Więcej informacji o tym zastosowaniu serwera proxy znajdziesz w naszym artykule On the Wire: Tools for API Developers (w języku angielskim).

W przypadku niektórych aplikacji dodanie obsługi serwera proxy może być trudne. Na szczęście większość bibliotek klienta interfejsu Google Data API można dostosować do współpracy z serwerem proxy HTTP po wprowadzeniu niewielkich zmian w kodzie. Ten artykuł ma być punktem wyjścia dla deweloperów, którzy chcą używać serwera proxy w przypadku żądań sieciowych wysyłanych przez ich aplikację.

Java

Korzystanie z serwera proxy HTTP w bibliotece klienta Java jest łatwe dzięki wykorzystaniu przez firmę Sun właściwości systemu do zarządzania ustawieniami połączenia.

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

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

Możesz też to 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 to rozszerzyć również na serwery proxy SSL. Jeśli ten sam serwer proxy z poprzedniego przykładu uruchamiał serwer proxy SSL na porcie 3129, wymagany kod wyglądałby tak:

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

Można to zrobić z poziomu wiersza poleceń w taki sam sposób jak w przypadku serwera proxy HTTP.

Czasami, aby korzystać z serwera proxy, musisz podać dane logowania. Zazwyczaj są one przesyłane za pomocą skrótu base64 zawartego w nagłówku HTTP, jak poniżej:

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

Pamiętaj, że powyższy kod korzysta z pakietu Apache Commons Codec, aby wykonać niezbędne kodowanie Base64. Aby uruchomić powyższy kod, musisz zaimportować klasę org.apache.commons.codec.binary.Base64.

.NET

Używanie serwera proxy HTTP z biblioteką klienta .NET nie jest tak proste jak w przypadku klienta Java, ale można to zrobić w podobny sposób podczas tworzenia obiektu usługi dla konkretnego produktu.

Możemy na przykład użyć serwera proxy do interakcji z usługą Kalendarz 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ć niezbędny serwer proxy na podstawie ustawień połączenia internetowego – to przydatna funkcja biblioteki .NET. Jeśli jednak nie ufasz mu w kwestii prawidłowego wykrywania serwera proxy, możesz go ustawić, 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

W tym artykule omówiliśmy, jak sprawić, aby niektóre biblioteki klienta interfejsu Google Data API działały z serwerem proxy HTTP. Deweloperzy pracujący za serwerem proxy wymaganym przez zasady sieci nadal mogą korzystać z tych bibliotek. Deweloperzy mogą też używać serwera proxy, aby ułatwić sobie debugowanie kodu. W tym celu serwer proxy rejestruje zawartość żądań i odpowiedzi HTTP wysyłanych do i z usługi internetowej Google. Istnieją bardziej zaawansowane przypadki użycia serwera proxy i innych bibliotek klienta, które nie są omówione w tym samouczku. Deweloperzy, którzy potrzebują dodatkowej pomocy, mogą dołączyć do naszych publicznych grup pomocy, do których linki znajdziesz poniżej.

Więcej informacji o bibliotekach klienta użytych w tym artykule znajdziesz na tych stronach:

Inne materiały: