У меня есть довольно базовый вспомогательный класс, который я использую для работы со всеми материалами Http Get/Post. Я использую HttpGet, HttpPost и HttpClient из библиотеки org.apache.http. Все мои работы отлично работают над HTTP, но как только я попытался использовать службу, которая работает через HTTPS, при выполнении запроса я получаю исключение ClientProtocolException. Единственное сообщение в исключении: "Сервер не смог ответить с допустимым ответом HTTP".
Чтобы протестировать, я отправил ту же самую полезную нагрузку из браузера, используя простую форму html и Fiddler2, используя RequestBuilder. Я отправил недопустимые и пустые почтовые ящики и даже отправил все вышеперечисленное с заголовками и без них, чтобы узнать, есть ли что-то напуганное о том, как объекты строили запрос.
Все, что я использовал в тестировании, дает мне действительный 200-HTTP-ответ HTTP. Служба просто дает мне структуру, описывающую ошибку, если я даю ей что-то иное, чем она ожидает.
Есть ли что-то особенное, которое мне нужно добавить к объектам HttpPost или HttpClient, чтобы сообщить ему использовать HTTPS? Должен ли я явно указывать ему использование другого порта?
EDIT:
Я действительно зарегистрировал неправильный сокет factory для связи https. Вот обновленный метод, который я использую для создания объекта HttpClient с правильным сокетом factory на случай, если кто-то будет искать эту проблему в будущем:
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);
}