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

Jeff Fisher, team delle API Google Data
Giugno 2007

Introduzione: perché utilizzare un proxy?

Un server proxy è un computer (o un servizio su un computer) che effettua richieste per conto di un numero di computer client, in genere a risorse esterne. Questo articolo riguarda i server proxy HTTP, poiché HTTP è il protocollo utilizzato per accedere alle API pubbliche per i servizi web di Google. Per estensione, anche i proxy HTTPS o SSL sono interessanti quando si effettuano richieste HTTP che contengono informazioni sensibili come dati privati degli utenti o password. Oggi molte grandi aziende utilizzano proxy HTTP per controllare quali siti web o informazioni i dipendenti possono visualizzare su internet. Anche le scuole e le biblioteche pubbliche sono note per l'implementazione di proxy a questo scopo. Esistono anche diversi server proxy disponibili pubblicamente che possono essere utilizzati per accedere in modo anonimo ai contenuti web.

I potenziali problemi riscontrati durante l'utilizzo di un server proxy dipendono dal software utilizzato e dalla sua configurazione. Un proxy è considerato "trasparente" se non altera la richiesta del client o la risposta del server in alcun modo diverso da quello necessario per l'identificazione e l'autenticazione del proxy. Tuttavia, un numero elevato di server proxy modifica la richiesta o la risposta in modi di cui uno sviluppatore dovrebbe essere a conoscenza. In particolare, alcuni proxy modificano il tipo di contenuti della risposta o eliminano le intestazioni HTTP keep-alive dall'invio al server esterno che ospita la risorsa.

Quindi, perché uno sviluppatore dovrebbe utilizzare un proxy HTTP o SSL? In genere, ci sono due motivi: è richiesto da alcune infrastrutture aziendali oppure lo sviluppatore vuole eseguire il debug di un'applicazione che utilizza un servizio web. Il primo motivo è del tutto inevitabile se le regole della rete su cui lavora lo sviluppatore vietano connessioni web o SSL non proxy a siti web esterni. Quest'ultimo motivo viene segnalato spesso nei nostri forum di assistenza dagli sviluppatori che cercano di risolvere i problemi quando utilizzano un servizio web Google. Esistono proxy "di debug" per scopi speciali come Fiddler e Charles, pensati appositamente per questa situazione. Per saperne di più su questo utilizzo di un server proxy, ti consigliamo di leggere il nostro articolo On the Wire: Tools for API Developers.

Per alcune applicazioni, l'aggiunta del supporto del server proxy può essere difficile. Fortunatamente, la maggior parte delle librerie client per l'API Google Data può essere resa compatibile con un server proxy HTTP dopo alcune piccole modifiche al codice. Questo articolo ha lo scopo di fungere da punto di partenza per uno sviluppatore che desidera utilizzare un server proxy per le richieste web effettuate dalla propria applicazione.

Java

L'utilizzo di un proxy HTTP con la libreria client Java è semplice grazie all'utilizzo delle proprietà di sistema da parte di Sun per gestire le impostazioni di connessione.

Ad esempio, se il server proxy aziendale è in esecuzione su "my.proxy.domain.com", sulla porta 3128, puoi aggiungere quanto segue al codice prima di creare un oggetto di servizio per Google Calendar, Fogli Google e così via.

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

In alternativa, puoi farlo dalla riga di comando quando avvii l'ambiente servlet:

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

Con le versioni più recenti del pacchetto JSSE, questa operazione può essere estesa anche ai proxy SSL. Se lo stesso server proxy dell'esempio precedente eseguisse un proxy SSL sulla porta 3129, il codice necessario sarebbe:

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

Questa operazione può essere eseguita anche dalla riga di comando nello stesso modo del proxy HTTP.

A volte, per utilizzare un server proxy, potrebbe essere necessario fornire le credenziali. In genere vengono inviati utilizzando un hash Base64 incluso in un'intestazione HTTP, come segue:

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

Tieni presente che il codice riportato sopra utilizza il pacchetto Apache Commons Codec per eseguire la codifica Base64 necessaria. Per eseguire il codice riportato sopra, devi importare la classe org.apache.commons.codec.binary.Base64.

.NET

Utilizzare un proxy HTTP con la libreria client .NET non è semplice come con il client Java, ma è possibile farlo in modo simile quando si crea l'oggetto servizio per un determinato prodotto.

Ad esempio, potremmo voler utilizzare un proxy per interagire con il servizio Google Calendar:

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;

In questo modo dovrebbe rilevare il proxy necessario dalle impostazioni di connessione a internet, una funzionalità utile della libreria .NET. Tuttavia, se non ti fidi che rilevi correttamente il proxy, puoi impostarlo anche modificando il codice in:

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;

Conclusione

Questo articolo ha illustrato come far funzionare alcune librerie client delle API di Google Data con un server proxy HTTP. Gli sviluppatori che lavorano dietro un server proxy imposto dai criteri di rete possono comunque utilizzare queste librerie. Gli sviluppatori possono anche utilizzare un server proxy per eseguire il debug del codice registrando i contenuti delle richieste e delle risposte HTTP inviate a e da un servizio web Google. Esistono casi d'uso più avanzati di un server proxy e altre librerie client non trattati in questo tutorial. Gli sviluppatori che hanno bisogno di ulteriore aiuto sono invitati a partecipare ai nostri gruppi di assistenza pubblici collegati di seguito.

Per ulteriori informazioni sulle librerie client utilizzate in questo articolo, visita le seguenti pagine:

Altre risorse: