Mam dość podstawową klasę pomocniczą, której używam do robienia wszystkich moich rzeczy Get/Post Http. Używam HttpGet, HttpPost i HttpClient z biblioteki org.apache.http. Wszystkie moje rzeczy działają dobrze przez HTTP, ale gdy tylko spróbowałem skorzystać z usługi działającej na HTTPS, otrzymuję wyjątek ClientProtocolException podczas wykonywania żądania. Jedynym komunikatem w tym wyjątku jest "Serwer nie odpowiedział prawidłową odpowiedzią HTTP".Bezpieczny post HTTP w Androidzie
Aby przetestować, wysłałem dokładnie tę samą ładowność z przeglądarki przy użyciu prostego formularza HTML i Fiddler2 przy użyciu RequestBuilder. Wysłałem nieprawidłowe i puste ładunki, a nawet wysłałem wszystkie powyższe za pomocą nagłówków i bez nagłówków, aby sprawdzić, czy coś jest fajne w sposobie budowania żądania przez obiekty.
Wszystko, czego używałem w testach, daje mi prawidłową odpowiedź HTTP o statusie 200. Usługa daje mi strukturę opisującą błąd, jeśli dam mu coś innego niż to, czego oczekuje.
Czy jest coś szczególnego, co muszę dodać do obiektów HttpPost lub HttpClient, aby powiedzieć, że używa HTTPS? Czy muszę wyraźnie powiedzieć, aby użyć innego portu?
EDIT:
I rzeczywiście zarejestrowany niewłaściwego gniazda fabrykę komunikacji https. Oto aktualizowane sposób, że mogę używać do tworzenia mojego httpclient obiekt z prawidłowym fabryki gniazda na wszelki wypadek ktoś szuka tego rodzaju problemów w przyszłości:
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);
}
Witam, bogaty, Dzięki za Twój wpis, jest to jedyna rzecz o https na Androidzie zwrócona przez google. Skąd otrzymałeś informację o napisaniu kodu, który tutaj pokazałeś? Czy mógłbyś również wyjaśnić powód wywołania wersji set, charset i tego parametru? Czy domyślnie nie są przypisane wartości normalne? Jeszcze jedno pytanie: importujesz plik org.apache.http.conn.ssl.SSLSocketFactory, prawda? Dzięki za wyczyszczenie tego –
Jestem prawie pewien, że pochodzi z książki Pro Android na temat Apress. Książka nie była świetna, ale rozdział o komunikacji http miał świetną dyskusję na temat praktycznego projektowania, gdy aplikacja musi wykonywać wiele połączeń internetowych. – Rich