मेरे पास एक सुंदर मूल सहायक वर्ग है जिसका उपयोग मैं अपने सभी एचटीपी प्राप्त/पोस्ट सामान करने के लिए कर रहा हूं। मैं org.apache.http लाइब्रेरी से HttpGet, HttpPost, और HttpClient का उपयोग कर रहा हूं। मेरी सभी चीजें HTTP पर ठीक काम करती हैं, लेकिन जैसे ही मैंने एचटीटीपीएस पर काम करने वाली सेवा का उपभोग करने की कोशिश की, मुझे अनुरोध निष्पादित करते समय क्लाइंटप्रोटोकॉल अपवाद प्राप्त होता है। अपवाद में एकमात्र संदेश है "सर्वर वैध HTTP प्रतिक्रिया के साथ प्रतिक्रिया करने में विफल रहा"।एंड्रॉइड में सुरक्षित HTTP पोस्ट
परीक्षण करने के लिए, मैंने अनुरोधकर्ता का उपयोग करके एक साधारण HTML फॉर्म और Fiddler2 का उपयोग कर ब्राउज़र से सटीक उसी पेलोड भेजा। मैंने अमान्य और खाली पेलोड भेज दिए हैं और यहां तक कि शीर्ष पर और बिना हेडर के सभी को यह देखने के लिए भेजा है कि ऑब्जेक्ट अनुरोध के तरीके के बारे में कुछ गड़बड़ है या नहीं।
मैंने जो भी परीक्षण किया है, वह मुझे एक वैध 200 स्थिति HTTP प्रतिक्रिया देता है। सेवा सिर्फ मुझे त्रुटि का वर्णन करने वाली संरचना प्रदान करती है अगर मैं इसे अपेक्षा करता हूं जो कुछ भी अपेक्षा करता है।
क्या एचटीटीपीएस का उपयोग करने के लिए एचटीपीपोस्ट या एचटीपी क्लाइंट ऑब्जेक्ट में जोड़ने के लिए मुझे कुछ विशेष आवश्यकता है? क्या मुझे इसे एक अलग बंदरगाह का उपयोग करने के लिए स्पष्ट रूप से बताना है?
संपादित करें:
मैं वास्तव में https संचार के लिए गलत सॉकेट कारखाने पंजीकृत। यहाँ विधि अपडेट की गई है कि मैं सिर्फ मामले में किसी को सही सॉकेट कारखाने के साथ मेरी HttpClient वस्तु बनाने के लिए उपयोग भविष्य में इस तरह की समस्या खोजों है:
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);
}
हाय रिच, आपकी पोस्ट के लिए धन्यवाद, Google पर एंड्रॉइड पर https के बारे में यह एकमात्र चीज है। आपको यहां दिए गए कोड को लिखने के लिए कहां जानकारी मिली? इसके अलावा, क्या आप सेट संस्करण, वर्णसेट और उस पैरामीटर को कॉल करने का कारण बता सकते हैं? क्या वे डिफ़ॉल्ट रूप से सामान्य मान निर्दिष्ट नहीं करते हैं? एक और सवाल: आप org.apache.http.conn.ssl.SSLSocketFactory आयात कर रहे हैं, है ना? –
को साफ़ करने के लिए धन्यवाद मुझे यकीन है कि यह एप्रेस पर प्रो एंड्रॉइड पुस्तक से आया है। पुस्तक बहुत अच्छी नहीं थी, लेकिन http संचार पर अध्याय व्यावहारिक डिजाइन के बारे में एक बड़ी चर्चा थी जब किसी ऐप को बहुत सी वेब कॉल करने की आवश्यकता होती है। – Rich