java - studio - volley android
¿Cómo imprimo el contenido de la solicitud httprequest? (4)
Tengo un error relacionado con httprequest, que ocurre algunas veces, así que me gustaría registrar el contenido de las solicitudes de HttpGet y HttpPost cuando eso ocurra.
Entonces, digamos, creo HttpGet así:
HttpGet g = new HttpGet();
g.setURI(new URI("http://www.google.com"));
g.setHeader("test", "hell yeah");
Esta es la representación de cadena que me gustaría obtener:
GET / HTTP/1.1
Host: www.google.com
test: hell yeah
Con la solicitud de publicación, también me gustaría obtener la cadena de contenido.
¿Cuál es la forma más fácil de hacerlo en java para Android?
Esto debería ser más útil para la depuración. La respuesta de @Juned Ahsan no especificará la URL completa y no imprimirá múltiples encabezados / parámetros.
private String httpServletRequestToString(HttpServletRequest request) {
StringBuilder sb = new StringBuilder();
sb.append("Request Method = [" + request.getMethod() + "], ");
sb.append("Request URL Path = [" + request.getRequestURL() + "], ");
String headers =
Collections.list(request.getHeaderNames()).stream()
.map(headerName -> headerName + " : " + Collections.list(request.getHeaders(headerName)) )
.collect(Collectors.joining(", "));
if (headers.isEmpty()) {
sb.append("Request headers: NONE,");
} else {
sb.append("Request headers: ["+headers+"],");
}
String parameters =
Collections.list(request.getParameterNames()).stream()
.map(p -> p + " : " + Arrays.asList( request.getParameterValues(p)) )
.collect(Collectors.joining(", "));
if (parameters.isEmpty()) {
sb.append("Request parameters: NONE.");
} else {
sb.append("Request parameters: [" + parameters + "].");
}
return sb.toString();
}
Más detalles que ayudan en el registro.
String client = request.getRemoteAddr();
logger.info("###### requested client: {} , Session ID : {} , URI :" + request.getMethod() + ":" + request.getRequestURI() + "", client, request.getSession().getId());
Map params = request.getParameterMap();
Iterator i = params.keySet().iterator();
while (i.hasNext()) {
String key = (String) i.next();
String value = ((String[]) params.get(key))[0];
logger.info("###### Request Param Name : {} , Value : {} ", key, value);
}
Puede imprimir el tipo de solicitud usando:
request.getMethod();
Puede imprimir todos los encabezados como se menciona aquí:
Enumeration<String> headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
System.out.println("Header Name - " + headerName + ", Value - " + request.getHeader(headerName));
}
Para imprimir todos los parámetros de solicitud, use esto:
Enumeration<String> params = request.getParameterNames();
while(params.hasMoreElements()){
String paramName = params.nextElement();
System.out.println("Parameter Name - "+paramName+", Value - "+request.getParameter(paramName));
}
request
es la instancia de HttpServletRequest
Puede embellecer las salidas según su necesidad.
Si desea la cadena de contenido y esta cadena no tiene parámetros, puede usar
String line = null;
BufferedReader reader = request.getReader();
while ((line = reader.readLine()) != null){
System.out.println(line);
}