首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何打印httprequest请求的内容?

如何打印httprequest请求的内容?
EN

Stack Overflow用户
提问于 2013-09-22 21:23:47
回答 6查看 127.4K关注 0票数 43

我遇到了一个与httprequest有关的bug,这种情况有时会发生,所以我想在发生这种情况时记录HttpGet和HttpPost请求的内容。

所以,假设我像这样创建HttpGet:

代码语言:javascript
复制
HttpGet g = new HttpGet();
g.setURI(new URI("http://www.google.com"));
g.setHeader("test", "hell yeah");

这是我想要得到的字符串表示:

代码语言:javascript
复制
GET / HTTP/1.1
Host: www.google.com
test: hell yeah

对于post请求,我还希望获得内容字符串。

在java for android中最简单的方法是什么?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-09-22 21:26:28

您可以使用以下命令打印请求类型:

代码语言:javascript
复制
request.getMethod();

您可以打印所有的标题,如下所述:

代码语言:javascript
复制
Enumeration<String> headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()) {
  String headerName = headerNames.nextElement();
  System.out.println("Header Name - " + headerName + ", Value - " + request.getHeader(headerName));
}

要打印所有请求参数,请使用以下命令:

代码语言:javascript
复制
Enumeration<String> params = request.getParameterNames(); 
while(params.hasMoreElements()){
 String paramName = params.nextElement();
 System.out.println("Parameter Name - "+paramName+", Value - "+request.getParameter(paramName));
}

requestHttpServletRequest的实例

您可以根据自己的需要来美化输出。

票数 95
EN

Stack Overflow用户

发布于 2018-08-13 19:53:39

这应该对调试更有帮助。@Juned Ahsan的回答不会指定完整的URL,也不会打印多个标题/参数。

代码语言:javascript
复制
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();
}
票数 5
EN

Stack Overflow用户

发布于 2019-04-24 17:44:10

以防有人也想要像我一样丢弃响应。我避免了转储响应体。下面的代码只是转储StatusCode和头文件。

代码语言:javascript
复制
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();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18944302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档