使用Apache HTTPClient - 如何在发送之前看到原始请求字符串?

时间:2012-05-31 00:24:31

标签: apache-commons-httpclient

出于调试目的,我希望看到将要发送的原始请求。有没有办法在没有HTTP监视器的情况下直接从HttpPostHttpClient的API获取此内容?

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

5 个答案:

答案 0 :(得分:29)

您可以为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");

答案 1 :(得分:0)

试试这个:

HttpClient client = new HttpClient();
PostMethod method = new PostMethod(url);

method.setParameter(...., ....);

检索URI

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

检索POST中的参数

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

答案 2 :(得分:0)

Public Function valueInArray(myValue As Variant, myArray As Variant) As Boolean

    Dim cnt As Long

    For cnt = LBound(myArray) To UBound(myArray)
        If CStr(myValue) = CStr(myArray(cnt)) Then
            valueInArray = True
            Exit Function
        End If
    Next cnt

End Function

此方法可以使您的请求通过代理服务器,因此您可以启动本地代理服务器,例如Fiddler,因此此调试代理可以显示http请求和响应的详细信息。

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

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