volley studio example java android http http-get

java - studio - ClientProtocolException en httpClient.execute(httpget, responseHandler)



volley android (4)

Como su código parece ser correcto, debe averiguar: ¿Es culpa del cliente (solicitud no válida) o culpa del servidor (respuesta no válida)? Para hacer eso, use una utilería http trace y compare las solicitudes de un navegador con las de su cliente. También podrá ver la respuesta sin procesar del servidor, si hay alguna. Si no puede resolverlo, agregue la solicitud sin procesar y la respuesta a su pregunta y alguien podría ayudarlo.

Estoy usando el siguiente código para solicitar xml desde un servidor 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(); }

Obtengo un clientProtocolException cuando llamo httpclient.execute (httpget, responseHandler). La URL funciona bien en un navegador web, devuelve el xml y el navegador lo muestra.

¿Alguna idea de por qué obtendría una ClientProtocolException y, sin embargo, el navegador la maneja bien?

Editar 1:

En cuanto a la excepción de protocolo, el mensaje de detalle es: "El servidor no respondió con una respuesta HTTP válida". No puedo cambiar el servidor web al que estoy llegando. ¿Hay alguna forma de ignorar esto y acceder a la respuesta?

Editar 2:

Descubrí que el servidor no está enviando un encabezado completo. ¿Hay alguna manera de acceder al contenido de la respuesta incluso cuando se devuelve un encabezado roto?

Edición 3: edité la dirección IP para que sea la dirección IP real a la que estoy accediendo. Cualquier ayuda sería muy apreciada.


He probado tu código con mi dirección IP. No hay error en el código. Acabo de cambiar ResponseHandler a BasicResponseHandler .

Mira esto

HttpClient httpclient = new DefaultHttpClient(); try { HttpGet httpget = new HttpGet("http://www.MyServer.com/get_public_tbl.cgi?A=1"); BasicResponseHandler responseHandler = new BasicResponseHandler();//Here is the change String responseBody = httpclient.execute(httpget, responseHandler); System.out.println(responseBody); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { httpclient.getConnectionManager().shutdown(); }


Podría intentar agregar su propio interceptor de respuesta, donde puede agregar o eliminar encabezados, o imprimir alguna información de depuración

hc.addResponseInterceptor(new HttpResponseInterceptor() { @Override public void process(HttpResponse response, HttpContext context) throws HttpException, IOException { response.getEntity().writeTo(System.out); } });


Verifique los encabezados que estableció en el cliente, vuelva a verificar tanto la clave como el valor de los encabezados. En mi caso, estaba usando el parámetro "csrf" en lugar de "Cookie".