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

Jeff Fisher, Google Data API'leri Ekibi
Haziran 2007

Giriş: Neden proxy?

Proxy sunucu, genellikle harici kaynaklara yönelik olarak, bir dizi istemci bilgisayar adına istekte bulunan bir bilgisayardır (veya bilgisayardaki bir hizmettir). Bu makalede, Google'ın web hizmetlerine yönelik herkese açık API'lere erişmek için kullanılan protokol HTTP olduğundan HTTP proxy sunucular ele alınmaktadır. Aynı şekilde, özel kullanıcı verileri veya şifreler gibi hassas bilgiler içeren HTTP istekleri gönderirken HTTPS veya SSL proxy'leri de önemlidir. Günümüzde birçok büyük şirket, çalışanların internette hangi web sitelerini veya bilgileri görüntüleyebileceğini kontrol etmek için HTTP proxy'leri kullanmaktadır. Halk kütüphaneleri ve okulların da bu amaçla proxy'ler uyguladığı bilinmektedir. Web içeriğine anonim olarak erişmek için kullanılabilecek herkese açık proxy sunucuları da vardır.

Proxy sunucu kullanırken karşılaşılabilecek olası sorunlar, kullanılan yazılıma ve bu yazılımın nasıl yapılandırıldığına bağlıdır. Bir proxy, istemciden gelen isteği veya sunucudan gelen yanıtı proxy tanımlama ve kimlik doğrulama için gerekli olanın dışında herhangi bir şekilde değiştirmiyorsa "şeffaf" olarak kabul edilir. Ancak çok sayıda proxy sunucu, isteği veya yanıtı geliştiricinin bilmesi gereken şekillerde değiştirir. Bazı proxy'ler özellikle yanıtın içerik türünü değiştirir veya kaynağı barındıran harici sunucuya gönderilen HTTP keep-alive üst bilgilerini kaldırır.

Peki geliştiriciler neden HTTP veya SSL proxy kullanmak ister? Genellikle bunun iki nedeni vardır: Bazı kurumsal altyapılar bunu gerektirir veya geliştirici, bir web hizmeti kullanan bir uygulamada hata ayıklamak ister. Geliştiricinin üzerinde çalıştığı ağın kuralları, harici web sitelerine proxy'siz web veya SSL bağlantılarını yasaklıyorsa ilk neden tamamen kaçınılmazdır. İkinci neden, Google web hizmetiyle ilgili sorunları gidermeye çalışan geliştiriciler tarafından destek forumlarımızda sıkça bildirilmektedir. Bu durum için özel olarak tasarlanmış Fiddler ve Charles gibi özel amaçlı "hata ayıklama" proxy'leri vardır. Proxy sunucunun bu şekilde kullanımı hakkında daha fazla bilgi için On the Wire: Tools for API Developers (On the Wire: API Geliştiricileri İçin Araçlar) başlıklı makalemizi inceleyebilirsiniz.

Bazı uygulamalarda proxy sunucu desteği eklemek zor olabilir. Neyse ki Google Veri API'si için istemci kitaplıklarının çoğu, küçük kod değişiklikleri yapılarak bir HTTP proxy sunucusuyla çalışacak şekilde ayarlanabilir. Bu makale, uygulaması tarafından yapılan web istekleri için proxy sunucusu kullanmak isteyen geliştiriciler için başlangıç noktası olarak tasarlanmıştır.

Java

Sun'ın bağlantı ayarlarını yönetmek için sistem özelliklerini kullanması sayesinde Java istemci kitaplığıyla HTTP proxy kullanmak kolaydır.

Örneğin, kurumsal proxy sunucunuz "my.proxy.domain.com" üzerinde 3128 bağlantı noktasında çalışıyorsa Google Takvim, Google E-Tablolar vb. için bir hizmet nesnesi oluşturmadan önce kodunuza aşağıdakileri ekleyebilirsiniz.

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

Alternatif olarak, servlet ortamınızı başlatırken bu işlemi komut satırında da yapabilirsiniz:

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

JSSE paketinin daha yeni sürümlerinde bu, SSL proxy'leri için de geçerlidir. Önceki örnekteki aynı proxy sunucusu 3129 numaralı bağlantı noktasında bir SSL proxy'si çalıştırıyorsa gerekli kod şu olur:

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

Bu işlem, HTTP proxy'de olduğu gibi komut satırından da yapılabilir.

Bazen, kullanmak için bir proxy sunucusuna kimlik bilgileri sağlamanız gerekebilir. Genellikle bir HTTP üstbilgisinde bulunan base64 karması kullanılarak aşağıdaki şekilde gönderilir:

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

Yukarıdaki kodun, gerekli base64 kodlamasını yapmak için Apache Commons Codec paketini kullandığını unutmayın. Yukarıdaki kodu çalıştırmak için org.apache.commons.codec.binary.Base64 sınıfını içe aktarmanız gerekir.

.NET

.NET istemci kitaplığıyla HTTP proxy kullanmak Java istemcisinde olduğu kadar kolay olmasa da belirli bir ürün için hizmet nesnesi oluştururken benzer şekilde yapılabilir.

Örneğin, Google Takvim hizmetiyle etkileşim kurmak için bir proxy kullanmak isteyebiliriz:

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;

Bu, .NET kitaplığının güzel bir özelliği olarak internet bağlantı ayarlarınızdan gerekli proxy'yi algılar. Ancak proxy'yi düzgün şekilde keşfedeceğine güvenmiyorsanız kodu şu şekilde değiştirerek de ayarlayabilirsiniz:

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;

Sonuç

Bu makalede, Google Veri API'si istemci kitaplıklarının bir kısmının HTTP proxy sunucusuyla nasıl çalışacağı açıklanmıştır. Ağ politikası tarafından zorunlu kılınan bir proxy sunucunun arkasında çalışan geliştiriciler bu kitaplıkları kullanmaya devam edebilir. Geliştiriciler, bir Google web hizmetine gönderilen ve bu hizmetten alınan HTTP isteklerinin ve yanıtlarının içeriklerini kaydederek kodlarında hata ayıklamalarına yardımcı olması için bir proxy sunucu da kullanabilir. Bu eğitimde ele alınmayan, proxy sunucunun ve diğer istemci kitaplıklarının daha gelişmiş kullanım alanları vardır. Daha fazla yardıma ihtiyacı olan geliştiricilerin, aşağıda bağlantıları verilen herkese açık destek gruplarımıza katılmasını öneririz.

Bu makalede kullanılan istemci kitaplıkları hakkında daha fazla bilgi için aşağıdaki sayfaları ziyaret edin:

Diğer Kaynaklar: