【问题标题】:Using Apache HTTPClient - how can one see the raw request string before it's being sent?使用 Apache HTTPClient - 如何在发送之前查看原始请求字符串?
【发布时间】:2012-05-31 00:24:31
【问题描述】:

出于调试目的,我想查看将要发送的原始请求。有没有办法直接从HttpPost 或HttpClient 的API 获得这个没有HTTP 监视器?

我发现了一些“几乎”重复的问题,但不是针对这个特定的问题

【问题讨论】:

    标签: apache-commons-httpclient


    【解决方案1】:

    您可以为 Apache HttpClient 设置一些环境变量(针对 4.3.2 测试的示例)。

    System.setProperty("org.apache.commons.logging.Log","org.apache.commons.logging.impl.SimpleLog");
    System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
    System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http.wire", "DEBUG");
    

    还有一些用于调试的变量:

    System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http.impl.conn", "DEBUG");
    System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http.impl.client", "DEBUG");
    System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http.client", "DEBUG");
    System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http", "DEBUG");
    

    【讨论】:

    【解决方案2】:
    org.apache.http.client.fluent.Request#viaProxy 
    

    这个方法可以让你的请求通过代理服务器,所以你可以启动一个本地代理服务器,例如Fiddler,这样这个调试代理就可以显示http请求和响应的细节。

    【讨论】:

      【解决方案3】:

      尝试在您的日志配置中启用DEBUG 模式,如果您使用的是log4j,您可以将其添加到项目的log4j.xml 文件中

      <root>
          <priority value="DEBUG" />
          <appender-ref ref="FILE" />
      </root>
      

      您将在日志文件中记录完整的请求标头、参数、正文等。

      【讨论】:

        【解决方案4】:

        log4j2 和/或 slf4j 解决方案

        对于所有使用 log4j2 和/或 slf4j 的人来说,所有提到的解决方案都不起作用。 我在我的 maven pom 中添加了以下内容:

            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
                <version>1.7.30</version>
            </dependency>
        

        添加一个 log4j2.xml 文件/或使用您现有的文件并添加:

            <Logger name="org.apache.http">
                <Level>DEBUG</Level>
            </Logger>
        

        当然,对于有效的 log4j2.xml 配置,您需要定义一些附加程序等。一个简单的例子可以是 found here

        【讨论】:

          【解决方案5】:

          试试这个:

          HttpClient client = new HttpClient();
          PostMethod method = new PostMethod(url);
          
          method.setParameter(...., ....);
          

          检索 URI

          System.out.println("getUri: " + method.getURI());
          

          在 POST 中检索参数

          method.getRequestEntity().writeRequest(System.out);
          

          【讨论】:

          • 不鼓励使用 System.out 进行日志记录
          • 我喜欢这个例子,因为method.getRequestEntity().writeRequest 帮助我打印出请求。
          • @MitchKent 虽然我同意,但我不同意用不相关的日志记录代码污染一个最小示例。
          • 这对于演示之外的任何东西都是不切实际的。你能想象对每一个 HTTP 调用都这样做吗?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-10-08
          • 2014-04-05
          • 1970-01-01
          • 1970-01-01
          • 2023-03-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多