giugno 2007
Introduzione: perché proxy?
Un server proxy è un computer (o un servizio su un computer) che invia richieste per conto di diversi computer client, in genere a risorse esterne. Questo articolo riguarda i server proxy HTTP perché il protocollo HTTP è il protocollo utilizzato per accedere alle API pubbliche per i servizi web di Google. Per estensione, i proxy HTTPS o SSL sono interessati anche quando effettuano richieste HTTP che contengono informazioni sensibili, come dati utente o password privati. Al momento, molte grandi aziende utilizzano proxy HTTP per controllare quali siti web o informazioni i dipendenti possono visualizzare su Internet. È noto anche che le scuole e le biblioteche pubbliche implementino i proxy a questo scopo. Esistono inoltre diversi server proxy disponibili pubblicamente che consentono di accedere in modo anonimo ai contenuti web.
I potenziali problemi che si verificano quando si utilizza un server proxy dipendono dal software utilizzato e dalla sua configurazione. Un proxy è considerato "trasparente" se non altera la richiesta dal client o la risposta dal server in modi non necessari per l'identificazione e l'autenticazione del proxy. Tuttavia, un numero elevato di server proxy altera la richiesta o la risposta in modo che lo sviluppatore debba esserne a conoscenza. In particolare, alcuni proxy modificano il tipo di contenuti della risposta o impediscono l'invio delle intestazioni HTTP keep-alive al server esterno che ospita la risorsa.
Perché uno sviluppatore dovrebbe usare un proxy HTTP o SSL? In generale, i motivi sono due: è richiesta da un'infrastruttura aziendale oppure lo sviluppatore vuole eseguire il debug di un'applicazione che utilizza un servizio web. Il primo motivo è del tutto inevitabile se le regole per la rete su cui lavora lo sviluppatore proibiscano le connessioni web o SSL non inviate tramite proxy ai siti web esterni. Quest'ultimo motivo viene segnalato frequentemente nei nostri forum di assistenza dagli sviluppatori che cercano di risolvere i problemi relativi a un servizio web di Google. Esistono proxy di "debug" speciali, come Navigator e Charles, che si basano su questa specifica situazione. Per ulteriori informazioni sull'utilizzo di un server proxy, ti consigliamo di leggere il nostro articolo On the Wire: Tools for API Developers.
Per alcune applicazioni può essere difficile aggiungere il supporto del server proxy. Fortunatamente, la maggior parte delle librerie client dell'API di dati Google può essere utilizzata con un server proxy HTTP dopo alcune lievi modifiche al codice. Questo articolo funge da punto di partenza per uno sviluppatore che vuole utilizzare un server proxy per le richieste web effettuate dalla propria applicazione.
Java
Utilizzare un proxy HTTP con la libreria client Java è facile grazie all'uso delle proprietà di sistema da parte di Sun per gestire le impostazioni di connessione.
Ad esempio, se il server proxy aziendale era 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 di lavoro Google e così via.
System.setProperty("http.proxyHost", "my.proxy.domain.com"); System.setProperty("http.proxyPort", "3128");
In alternativa, puoi eseguirla 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, ciò può essere esteso anche ai proxy SSL. Se nello stesso server proxy era in esecuzione un proxy SSL sulla porta 3129, il codice necessario sarebbe:
System.setProperty("https.proxyHost", "my.proxy.domain.com"); System.setProperty("https.proxyPort", "3129");
Puoi farlo anche dalla riga di comando come nel proxy HTTP.
A volte potrebbe essere necessario fornire credenziali a un server proxy per utilizzarlo. Di solito vengono inviati utilizzando un hash base64 incluso in un'intestazione HTTP, come indicato di seguito:
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 sopra riportato utilizza il pacchetto Apache Commons Codec per eseguire la codifica base64 necessaria. Dovrai importare la classe org.apache.commons.codec.binary.Base64
per eseguire il codice riportato sopra.
.NET
L'utilizzo di un proxy HTTP con la libreria client .NET non è semplice come con il client Java, ma può essere fatto in modo simile durante la creazione dell'oggetto di servizio per un particolare prodotto.
Ad esempio, potremmo 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;
Questo dovrebbe rilevare il proxy necessario dalle impostazioni di connessione a Internet, una delle caratteristiche della libreria .NET. Tuttavia, se non ti fidi del rilevamento corretto del proxy, puoi anche impostarlo 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 spiega come fare in modo che alcune librerie client dell'API Google Data funzionino con un server proxy HTTP. Gli sviluppatori che lavorano dietro un server proxy richiesto dal criterio di rete possono comunque utilizzare queste librerie. Gli sviluppatori possono anche utilizzare un server proxy per semplificare il debug del codice facendo in modo che il server proxy registri i contenuti delle richieste HTTP e delle risposte inviate da e verso un servizio web di Google. In questo tutorial vengono utilizzati casi più avanzati di server proxy e altre librerie client. Gli sviluppatori che hanno bisogno di ulteriore assistenza sono incoraggiati a partecipare ai nostri gruppi di assistenza pubblici indicati di seguito.
Per ulteriori informazioni sulle librerie client utilizzate in questo articolo, visita le seguenti pagine:
Altre risorse:
- Gruppo di assistenza per le API di dati di Google
- Pagina wiki Presentazione Objective-C: spiega brevemente come rilevare gli errori da un server proxy e come eseguire l'autenticazione con una finestra di dialogo dell'utente.