J'ai une jolie base de la classe helper que j'utilise pour faire mes Http Get/Post trucs. Je suis en utilisant HttpGet, HttpPost, et HttpClient à partir de l'organisation.apache.http bibliothèque. Tous les trucs de ma fonctionne très bien sur HTTP, mais dès que j'ai essayé de consommer un service qui fonctionne sur de HTTPS, je reçois un ClientProtocolException lors de l'exécution de la demande. Le seul message de l'exception est "Le serveur n'a pas pu répondre avec une réponse HTTP valide".
Pour tester, j'ai envoyé exactement la même charge utile à partir d'un navigateur à l'aide d'un simple formulaire html et Fiddler2 à l'aide de la RequestBuilder. J'ai envoyé invalide à vide et charge utile et même envoyé tous les ci-dessus avec et sans les en-têtes pour voir si il y avait quelque chose de funky sur la façon dont les objets ont été la construction de la demande.
Tout ce que j'ai utilisées dans le test me donne un valide 200 le statut de la réponse HTTP. Le service me donne juste une structure décrivant l'erreur si je lui donne autre chose que ce qu'il attend.
Est-il quelque chose de spécial que je dois ajouter à la HttpPost ou objet HttpClient(s) pour lui dire d'utiliser le protocole HTTPS? Dois-je indiquer explicitement à utiliser un port différent?
EDIT:
J'ai bien enregistré la mauvaise prise en usine pour la communication https. Voici la mise à jour de la méthode que j'utilise pour créer mes HttpClient objet avec la prise correcte de l'usine, juste au cas où quelqu'un des recherches de ce genre de problème à l'avenir:
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);
}