有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java HttpRequestBase如何打印请求及其所有数据

我正在使用HttpRequestBase,我想在使用它之前将请求完全记录到日志文件中

默认的toString只返回请求行,我想打印所有的标题、参数、请求正文等

有没有办法做到这一点


共 (1) 个答案

  1. # 1 楼答案

    HttpRequestBase对象(HttpGetHttpPost等)包含有关头、参数的信息,实现类包含主体,但它实际上没有序列化为String。当HttpClient实际发送请求时就会发生这种情况

    您可以使用http组件logging configuration

    或者你可以调用适当的方法,自己动手

    HttpRequestBase base = new HttpGet("www.google.com");
    Header[] headers = base.getAllHeaders();
    // iterate and print
    

    对于body,您需要强制转换到实现类,并获取HttpEntity(如果有)

    HttpEntity entity = ((HttpPost)base).getEntity(); // example
    

    并打印它(它的InputStream内容)注意:这可能会消耗实体

    完整示例

    HttpPost post = new HttpPost("www.google.com");
    post.setHeader(new BasicHeader("User-Agent", "random client"));
    HttpEntity entity = new StringEntity("yellaworld");
    post.setEntity(entity);
    Header[] headers = post.getAllHeaders();
    String content = EntityUtils.toString(entity);
    
    System.out.println(post.toString());
    for (Header header : headers) {
        System.out.println(header.getName() + ": " + header.getValue());
    }
    System.out.println();
    System.out.println(content);
    

    印刷品

    POST www.google.com HTTP/1.1
    User-Agent: random client
    
    yellaworld