Tüm Http Get/Post öğelerini yapmak için kullanıyorum oldukça basit bir yardımcı sınıfım var. Org.apache.http kütüphanesinden HttpGet, HttpPost ve HttpClient kullanıyorum. Benim tüm şeyler HTTP üzerinden iyi çalışır, ancak HTTPS üzerinde çalışan bir hizmeti tüketmeye çalıştığında, isteği yürütürken bir ClientProtocolException alırım. Kural dışı durumdaki tek ileti "Sunucu geçerli bir HTTP yanıtıyla yanıt veremedi".Android'de Güvenli HTTP Gönderi
Test etmek için, RequestBuilder kullanarak basit bir html formu ve Fiddler2 kullanarak aynı yükü bir tarayıcıdan gönderdim. Geçersiz ve boş yükler yolladım ve hatta yukarıdakilerin tümünü, nesnelerin isteği oluşturma şekliyle ilgili ilginç bir şey olup olmadığını görmek için üstbilgilerle birlikte ve olmadan gönderdim.
Testte kullandığım her şey bana geçerli bir 200 durum HTTP yanıtı veriyor. Hizmet, bana beklediğinden başka bir şey verirse, hatayı açıklayan bir yapı verir.
HTTPS kullanmasını söylemek için HttpPost veya HttpClient nesnelerine eklemem gereken özel bir şey var mı? Açıkça farklı bir bağlantı noktası kullanmasını söylemek zorunda mıyım?
DÜZENLEME: Gerçekten https iletişim için yanlış soket fabrikası kayıtlı
. İşte ben sadece durumda birisi doğru soket fabrikasında ile benim HttpClient nesne oluşturmak için kullanın güncellenmiş yöntem gelecekte bu tür bir sorun aramaların geçerli:
private HttpClient createHttpClient()
{
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.DEFAULT_CONTENT_CHARSET);
HttpProtocolParams.setUseExpectContinue(params, true);
SchemeRegistry schReg = new SchemeRegistry();
schReg.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
schReg.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
ClientConnectionManager conMgr = new ThreadSafeClientConnManager(params, schReg);
return new DefaultHttpClient(conMgr, params);
}
Merhaba Zengin, Gönderiniz için teşekkürler, https on Google hakkında döndürülen tek şey, Google tarafından döndürüldü. Burada gösterdiğiniz kodu yazmak için bilgileri nereden edindiniz? Ayrıca, set sürümü, karakter takımı ve bu parametrenin çağrılmasının nedenini açıklayabilir misiniz? Varsayılan değerler varsayılan olarak atanmadı mı? Bir soru daha var: org.apache.http.conn.ssl.SSLSocketFactory, değil mi? Bunu temizlediğiniz için teşekkürler –
Bunun, Apress'teki Pro Android uygulamasından geldiğine eminim. Kitap harikaydı, ancak bir uygulamanın bir çok web araması yapması gerektiğinde, http iletişimindeki bölümün pratik tasarım hakkında harika bir tartışması vardı. – Rich