ClientProtocolException dans httpClient.execute(httpget, responseHandler)
Je suis en utilisant le code suivant à la demande xml à partir d'un serveur web:
HttpClient httpclient = new DefaultHttpClient()
try
{
HttpGet httpget = new HttpGet("http://63.255.173.242/get_public_tbl.cgi?A=1");
ResponseHandler responseHandler = new BasicResponseHandler();
String responseBody = httpclient.execute(httpget, responseHandler);
System.out.println(responseBody);
}
catch (ClientProtocolException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
httpclient.getConnectionManager().shutdown();
}
- Je obtenir un clientProtocolException quand je l'appelle httpclient.execute(httpget, responseHandler). L'url fonctionne très bien dans un navigateur web, il renvoie le xml et le navigateur affiche.
Des idées pourquoi je voudrais obtenir un clientProtocolException et pourtant, le navigateur gère bien?
Edit 1:
En regardant le protocole d'exception le détail message: "Le serveur n'a pas pu répondre avec une réponse HTTP valide". Je ne peux pas changer le serveur web que je suis frapper. Est-il un moyen de l'ignorer et d'accéder simplement à la réponse?
Edit 2:
J'ai trouvé que le serveur n'est pas en renvoyant un en-tête complet. Est-il un moyen d'accéder au contenu de la réponse, même lors d'une fracture de l'en-tête est de retour?
Edit 3: j'ai modifié l'adresse ip est l'adresse IP réelle je suis frapper. Toute aide serait grandement appréciée.
OriginalL'auteur Kevin Westwood | 2012-10-02
Vous devez vous connecter pour publier un commentaire.
Que votre code semble correct, vous avez à comprendre: Est-ce la faute du client (demande non valide), ou le serveur de la faute (réponse non valide). Pour ce faire, utilisez un trace http utitlity et de comparer les demandes d'un navigateur à celui de votre client. Vous serez également en mesure de voir le raw de réponse du serveur, si il y en a. Si vous ne pouvez pas comprendre, puis, ajouter la crue de demande et de réponse à votre question et quelqu'un pourrait être en mesure de vous aider.
J'ai trouvé que le serveur n'est pas l'envoi d'un en-tête à tous. La meilleure solution était de communiquer directement avec les sockets.
ce que vous n'avez finalement à ce problème , j'obtiens le même problème?
OriginalL'auteur Eugene Beresovsky
J'ai testé votre code avec mon adresse ip. Il n'y a pas d'erreur dans le code. Je viens de changer
ResponseHandler
àBasicResponseHandler
.cochez cette
OriginalL'auteur Ram kiran
Vous pourriez essayer d'ajouter votre propre réponse interceptor, où vous pouvez ajouter ou supprimer des en-têtes, ou imprimer des informations de débogage
U peut ajouter
new HttpRequestInterceptor
avec la méthodevoid process(HttpRequest request, HttpContext context)
même façon, puis d'imprimer et de comparer les en-têtes de la requête qui va de navigateur et de l'ur code. Peut-être serveur w8 "Accept-Encoding", "gzip" en-tête ou qch d'autreOriginalL'auteur lanwen
Vérifier vos en-têtes que vous définissez dans le client, re-vérifier à la fois la clé et la valeur des en-têtes. Dans mon cas, j'ai été en utilisant "csrf" param au lieu de "Cookie".
OriginalL'auteur Rahul Jain
J'ai été confronté à un problème similaire, ClientProtocolException
Apparemment, le serveur n'a pas la cible du service web SSL
donc, c'était une erreur de configuration SSL,
Sous-jacentes d'erreur était:
Après l'ajout de la truststore de java cette erreur a disparu.
espère que ça aidera quelqu'un.
OriginalL'auteur user648026