Httprequestに関連するバグがありますが、これは時々発生するため、HttpGetおよびHttpPostリクエストのコンテンツをログに記録します。
したがって、たとえば、次のようにHttpGetを作成します。
HttpGet g = new HttpGet();
g.setURI(new URI("http://www.google.com"));
g.setHeader("test", "hell yeah");
これは私が取得したい文字列表現です:
GET / HTTP/1.1
Host: www.google.com
test: hell yeah
投稿リクエストでは、コンテンツ文字列も取得したいと思います。
Java for Androidでそれを行う最も簡単な方法は何ですか?
以下を使用して、要求タイプを印刷できます。
request.getMethod();
ここで説明したように、すべてのヘッダーを印刷できます。
Enumeration<String> headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
System.out.println("Header Name - " + headerName + ", Value - " + request.getHeader(headerName));
}
すべてのリクエストパラメータを印刷するには、これを使用します:
Enumeration<String> params = request.getParameterNames();
while(params.hasMoreElements()){
String paramName = params.nextElement();
System.out.println("Parameter Name - "+paramName+", Value - "+request.getParameter(paramName));
}
request
はHttpServletRequest
のインスタンスです
必要に応じて出力を美しくすることができます。
これはデバッグに役立つはずです。 @Juned Ahsanからの回答は完全なURLを指定せず、複数のヘッダー/パラメーターを出力しません。
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();
}
誰かが私のような応答をダンプしたい場合に備えて。応答本文をダンプすることを避けました。次のコードは、StatusCodeとHeadersをダンプするだけです。
static private String dumpResponse(HttpServletResponse resp){
StringBuilder sb = new StringBuilder();
sb.append("Response Status = [" + resp.getStatus() + "], ");
String headers = resp.getHeaderNames().stream()
.map(headerName -> headerName + " : " + resp.getHeaders(headerName) )
.collect(Collectors.joining(", "));
if (headers.isEmpty()) {
sb.append("Response headers: NONE,");
} else {
sb.append("Response headers: "+headers+",");
}
return sb.toString();
}
ロギングに役立つ詳細
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);
}
コンテンツ文字列が必要で、この文字列に使用できるパラメータがない場合
String line = null;
BufferedReader reader = request.getReader();
while ((line = reader.readLine()) != null){
System.out.println(line);
}