出于调试目的,我想查看将要发送的原始请求。有没有办法在没有 HTTP 监视器的情况下直接从HttpPost
or的 API 获得这个HttpClient
?
我发现了一些“几乎”重复的问题,但不是针对这个特定的问题
出于调试目的,我想查看将要发送的原始请求。有没有办法在没有 HTTP 监视器的情况下直接从HttpPost
or的 API 获得这个HttpClient
?
我发现了一些“几乎”重复的问题,但不是针对这个特定的问题
您可以为 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");
org.apache.http.client.fluent.Request#viaProxy
这种方法可以让你的请求通过代理服务器,所以你可以启动一个本地代理服务器,例如Fiddler,这样这个调试代理就可以显示http请求和响应的详细信息。
尝试DEBUG
在您的日志记录配置中启用模式,如果您正在使用log4j
,您可以将其添加到log4j.xml
项目的文件中
<root>
<priority value="DEBUG" />
<appender-ref ref="FILE" />
</root>
您将在日志文件中记录完整的请求标头、参数、正文等。
对于使用 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 配置,您需要定义一些附加程序等。可以在这里找到一个简单的示例
试试这个:
HttpClient client = new HttpClient();
PostMethod method = new PostMethod(url);
method.setParameter(...., ....);
检索 URI
System.out.println("getUri: " + method.getURI());
在 POST 中检索参数
method.getRequestEntity().writeRequest(System.out);