HTTP Post İstekleri
HTTP Post İstekleri
HTTP POST araması yapmak, HTTP GET araması yapmaya çok benzer. HttpClient ile HTTP POST araması yapmak için, HttpClient’in yürütme yöntemini bir HttpPost örneğiyle çağırmanız gerekir. HTTP POST çağrıları yaparken, genellikle HTTP isteğinin bir parçası olarak URL kodlu ad/değer form parametrelerini iletirsiniz.
Bunu HttpClient ile yapmak için, NameValuePair nesnelerinin örneklerini içeren bir liste oluşturmanız ve ardından bu listeyi bir UrlEncodedFormEntity nesnesiyle sarmanız gerekir.
NameValuePair, bir ad/değer birleşimini sarar ve UrlEncodedFormEntity sınıfı, HTTP çağrıları (genellikle POST çağrıları) için uygun bir NameValuePair nesneleri listesinin nasıl kodlanacağını bilir. Bir UrlEncodedFormEntity oluşturduktan sonra, HttpPost’un varlık türünü UrlEncodedFormEntity olarak ayarlayabilir ve ardından isteği yürütebilirsiniz.
Listing’de bir HttpClient oluşturuyoruz ve ardından HttpPost’u HTTP bitiş noktasının URL’si ile başlatıyoruz. Ardından, NameValuePair nesnelerinin bir listesini oluşturacağız ve bunu tek bir ad/değer parametresiyle dolduracağız. Parametrenin adını bir ve parametrenin değerini valueGoesHere olarak ayarladık.
Ardından, NameValuePair nesnelerinin listesini yapıcısına ileterek bir UrlEncodedFormEntity örneği oluştururuz. Son olarak, POST isteğinin setEntity() yöntemini çağırıyoruz ve ardından isteği HttpClient örneğini kullanarak yürütüyoruz.
HTTP POST aslında bundan çok daha güçlüdür. Bir HTTP POST ile, Listeleme’de gösterildiği gibi basit ad/değer parametrelerinin yanı sıra dosyalar gibi karmaşık parametreleri de iletebiliriz. HTTP POST, “çok parçalı POST” olarak bilinen başka bir istek gövdesi biçimini destekler. Bu tür POST ile, ad/değer parametrelerini daha önce olduğu gibi isteğe bağlı dosyalarla birlikte gönderebilirsiniz.
Ne yazık ki, Android ile birlikte gönderilen HttpClient sürümü çok parçalı POST’u doğrudan desteklemez. Çok parçalı POST çağrıları yapmak için üç ek Apache açık kaynak projesi edinmeniz gerekir: Apache Commons IO, Mime4j ve HttpMime.
Not: Çok parçalı örnek, Android çalışma zamanının bir parçası olarak dahil edilmeyen birkaç .jar dosyası kullanır. .jar dosyalarının .apk dosyanızın bir parçası olarak paketlenmesini sağlamak için bunları Eclipse’de harici .jar dosyaları olarak eklemeniz gerekir: Eclipse’de projenize sağ tıklayın, Özellikler’i seçin, Java Sınıfı Yolu’nu seçin, Kitaplıkları seçin sekmesini ve ardından Harici JAR’ları Ekle’yi seçin.
Bu adımların izlenmesi, .jar dosyalarının çalışma zamanında olduğu kadar derleme zamanında da kullanılabilir olmasını sağlayacaktır. Çok parçalı bir POST yürütmek için, bir HttpPost oluşturmanız ve onun setEntity() yöntemini bir MultipartEntity örneğiyle çağırmanız gerekir (ad/değer parametresi form gönderisi için oluşturduğumuz UrlEncodedFormEntity yerine). MultipartEntity, çok parçalı bir POST isteğinin gövdesini temsil eder.
Gösterildiği gibi, bir MultipartEntity örneği oluşturursunuz ve ardından her parçayla birlikte addPart() yöntemini çağırırsınız. Listeleme, isteğe üç bölüm ekler: iki dize bölümü ve bir XML dosyası.
Son olarak, bir web kaynağına çok parçalı bir POST geçirmenizi gerektiren bir uygulama oluşturuyorsanız, yerel iş istasyonunuzda hizmetin sahte bir uygulamasını kullanarak çözümde hata ayıklamanız gerekecektir.
Yerel makineye localhost veya 127.0.0.1 IP adresini kullanarak erişebilirsiniz. Ancak Android uygulamalarında, öykünücünün kendi yerel ana bilgisayarı olacağı için yerel ana bilgisayarı (veya 127.0.0.1) kullanamazsınız.
Öykünücüde çalışan uygulamadan geliştirme iş istasyonunuza başvurmak için iş istasyonunuzun IP adresini kullanmanız gerekir. Bir Windows XP makinesinde, IPConfig DOS komutunu çalıştırarak IP adresinizi alabilirsiniz. IP adresini iş istasyonunuzun IP adresiyle değiştirerek Listelemeyi değiştirmeniz gerekir.
Post request Nedir
get, post, put, delete nedir
Http GET Nedir
HTTP istekleri
Http POST Nedir
Post ve GET metodu Nedir
GET ve POST farkı
Post metodu Nedir
İstisnalarla Başa Çıkmak
İstisnalarla uğraşmak her programın bir parçasıdır, ancak harici hizmetlerden (HTTP hizmetleri gibi) yararlanan yazılımlar hata olasılığı arttığı için istisnalara daha fazla dikkat etmelidir. HTTP hizmetlerinden yararlanırken bekleyebileceğiniz birkaç istisna türü vardır. Bunlar taşıma istisnalarını, protokol istisnalarını ve zaman aşımlarını içerir. Bu istisnaların ne zaman meydana gelebileceğini anlamalısınız.
Taşıma istisnaları birkaç nedenden dolayı ortaya çıkabilir, ancak en olası senaryo (bir mobil cihazla) zayıf ağ bağlantısıdır. Protokol istisnaları, HTTP protokol katmanındaki istisnalardır. Bunlar, kimlik doğrulama hatalarını, geçersiz tanımlama bilgilerini vb. içerir.
Örneğin, HTTP isteğinizin bir parçası olarak oturum açma kimlik bilgilerini sağlamanız gerekiyorsa, ancak bunu başaramazsanız, protokol istisnalarını görmeyi bekleyebilirsiniz. Zaman aşımları, HTTP çağrılarıyla ilgili olarak iki şekilde gelir: bağlantı zaman aşımları ve soket zaman aşımları.
HttpClient HTTP sunucusuna bağlanamıyorsa, örneğin URL doğru değilse veya sunucu kullanılamıyorsa bağlantı zaman aşımı meydana gelebilir.
HttpClient tanımlanmış bir süre içinde yanıt alamazsa soket zaman aşımı oluşabilir. Başka bir deyişle, HttpClient sunucuya bağlanabildi, ancak sunucu ayrılan süre içinde bir yanıt döndüremedi.
Artık meydana gelebilecek istisna türlerini anladığınıza göre, onlarla nasıl başa çıkacaksınız? Neyse ki HttpClient, yükün çoğunu omuzlarınızdan alan sağlam bir çerçevedir. Aslında endişelenmeniz gereken istisna türleri, kolayca yönetebileceğiniz istisna türleridir.
Daha önce de belirttiğimiz gibi, bekleyebileceğiniz üç tür istisna vardır: aktarım istisnaları, protokol istisnaları ve zaman aşımları. HttpClient, taşıma sorunlarını tespit ederek ve istekleri yeniden deneyerek (bu tür istisnalarla çok iyi çalışır) taşıma istisnalarıyla ilgilenir.
Protokol istisnaları, genellikle geliştirme sırasında ortadan kaldırılabilen istisnalardır. Zaman aşımları, uğraşmanız gerekenlerdir. Her iki tür zaman aşımı, bağlantı zaman aşımları ve yuva zaman aşımlarıyla başa çıkmak için basit ve etkili bir yaklaşım, HTTP isteğinizin yürütme yöntemini bir try/catch ile sarmak ve ardından bir hata oluşursa yeniden denemektir.
Listelemedeki kod, HTTP çağrıları yaparken zaman aşımlarından kurtulmak için basit bir yeniden deneme tekniğini nasıl uygulayabileceğinizi gösterir. Liste iki yöntem gösterir: yürüten bir HTTP GET (executeHttpGet()) ve bu yöntemi yeniden deneme mantığıyla (executeHttpGetWithRetry()) tamamlayan bir başkasıdır.
Mantık çok basit. Denemek istediğimiz tekrar deneme sayısını 3 olarak ayarlıyoruz ve ardından bir while döngüsüne giriyoruz. Döngü içinde isteği yürütürüz. İsteğin bir try/catch bloğu ile sarıldığını ve catch bloğunda yeniden deneme denemelerinin sayısını tüketip tüketmediğimizi kontrol ettiğimizi unutmayın.
HttpClient’i gerçek dünyadaki bir uygulamanın parçası olarak kullanırken, ortaya çıkabilecek çoklu kullanım sorunlarına biraz dikkat etmeniz gerekir.
Web sitelerinizi, arama motorlarında en yukarı getirmek adına sizlere 3 adet paket öneriyoruz. Bu paketler sayesinde web siteleriniz aramalarda 1 yıl içerisinde en yukarıya tırmanacaktır.
1) Backlink Paketi 50 $ (Yıllık Ücret)
2) Hızlandırma Paketi 300 $ (Yıllık Ücret)
3) Kelime Yönlendirme Paketi 150 $ (Aylık Ücret)