Tehlikede Yaşama: Proxy Sunucuları Google Data API İstemci Kitaplıklarıyla Kullanma

Jeff Fisher, Google Veri API'leri Ekibi
Haziran 2007

Giriş: Neden proxy?

Proxy sunucusu, genellikle harici kaynaklara, onlar adına çeşitli istemci bilgisayarlar için istekte bulunan bir bilgisayardır (veya bilgisayardaki bir hizmettir). HTTP, Google'ın web hizmetlerine yönelik genel API'lere erişmek için kullanılan protokol olduğu için bu makale HTTP proxy sunucularıyla ilgilidir. Ek olarak, gizli kullanıcı verileri veya şifreler gibi hassas bilgiler içeren HTTP isteklerinde bulunurken HTTPS veya SSL proxy'leri de ilgi görür. 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'lerini kullanmaktadır. Halk kütüphaneleri ve okulların da bu amaçla proxy'ler uyguladığı bilinmektedir. Ayrıca, web içeriğine anonim olarak erişmek için kullanılabilecek, herkese açık bazı proxy sunucuları da vardır.

Proxy sunucu kullanılırken karşılaşılan olası sorunlar, kullanılan yazılıma ve bu işlemin nasıl yapılandırıldığına bağlıdır. Proxy, istemcinin kimliğini veya kimlik doğrulaması için gerekli olanların dışında hiçbir şekilde sunucudan gelen yanıtı değiştirmezse "şeffaf" olarak kabul edilir. Ancak, çok sayıda proxy sunucu, isteği veya yanıtı geliştiricinin bilmesi gereken şekillerde değiştirir. Özellikle, belirli proxy'ler yanıtın içerik türünü değiştirir veya HTTP keep-alive üstbilgilerinin kaynağı barındıran harici sunucuya gönderilmesini engeller.

Bir geliştirici neden HTTP veya SSL proxy kullanmak ister? Genellikle bunun iki nedeni vardır: Bazı kurumsal altyapılar için gereklidir veya geliştirici, web hizmeti kullanan bir uygulamanın hatalarını ayıklamak ister. İlk neden, geliştiricinin üzerinde çalıştığı ağın kurallarının harici proxy'lerle ilgili proxy içermeyen web veya SSL bağlantılarını yasaklaması durumunda tamamen kaçınılmazdır. İkinci neden, bir Google web hizmeti ile ilgili sorunları gidermeye çalışan geliştiriciler tarafından destek forumlarımızda sık sık bildirimde bulunmaktadır. Tam olarak bu duruma yönelik olan Fiddler ve Charles gibi özel amaçlı "hata ayıklama" proxy'leri vardır. Bir proxy sunucunun kullanımıyla ilgili daha fazla bilgi edinmek için The Wire: Tools for API Geliştiricileri makalemizi okuyabilirsiniz.

Bazı uygulamalarda, proxy sunucu desteğini eklemek zor olabilir. Neyse ki Google Data API'ye ait istemci kitaplıklarının çoğu, küçük kod değişikliklerinden sonra HTTP proxy sunucuyla çalışacak şekilde oluşturulabilir. Bu makale, uygulamaları tarafından yapılan web istekleri için bir proxy sunucu kullanmak isteyen bir geliştirici için başlangıç noktası olarak tasarlanmıştır.

Java

Bağlantı ayarlarını yönetmek üzere Sun'ın sistem özelliklerini kullanması sayesinde, Java istemci kitaplığıyla HTTP proxy kullanmak kolaydır.

Örneğin, kurumsal proxy sunucunuz "my.proxy.domain.com" adresinde 3128 numaralı 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 komut satırında da bunu yapabilirsiniz:

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

Bu, JSSE paketinin daha yeni sürümlerinde de SSL proxy'lere genişletilebilir. Önceki örnekte yer alan aynı proxy sunucu, 3129 numaralı bağlantı noktasında bir SSL proxy çalıştırıyorsa gerekli kod şöyledir:

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

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

Bazen kullanmak için bir proxy sunucuya kimlik bilgisi sağlamanız gerekebilir. Bunlar genellikle, HTTP üst bilgisinde bulunan base64 karması kullanılarak şu ş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, base64 kodlamasını gerekli kılmak 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 bir HTTP proxy kullanmak Java istemcisiyle aynı derecede kolay değildir ancak belirli bir ürün için hizmet nesnesi oluşturulurken benzer şekilde gerçekleştirilebilir.

Örneğin, Google Takvim hizmetiyle etkileşimde bulunmak için bir proxy kullanabiliriz:

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 işlem, .NET kitaplığının iyi bir özelliği olan gerekli proxy'yi İnternet bağlantısı ayarlarınızdan 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, bazı Google Data API istemci kitaplıklarının bir HTTP proxy sunucusuyla nasıl çalışacağı açıklanmaktadır. Ağ politikasının zorunlu kıldığı bir proxy sunucunun arkasında çalışan geliştiriciler bu kitaplıkları kullanmaya devam edebilir. Geliştiriciler, proxy sunucunun, HTTP isteklerinin ve Google web hizmetine gönderilip alınan yanıtların içeriğini kaydetmesini sağlayarak kodlarında hata ayıklamasına yardımcı olacak bir proxy sunucu da kullanabilir. Bu eğiticide ele alınmayan bir proxy sunucu ve diğer istemci kitaplıklarının daha gelişmiş kullanım alanları mevcuttur. Ek yardıma ihtiyaç duyan geliştiricilerin, aşağıda bağlantısı verilen herkese açık destek gruplarımıza katılmaları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: