我正在将用于从 Java 访问网络商店 API 的示例代码重写为经典 ASP。 Java 代码可以工作,它发送请求并返回正确的结果。 ASP 代码的作用完全相同,但它所做的只是返回一个错误,表明授权有问题。我已经检查了 hmac 签名字符串(sha256、base64),但这给出了与 Java 代码相同的结果。
因此,我决定检查 HTTP 请求的实际情况,并将它们相互进行比较。 Fiddler 似乎是一个不错的选择,但由于某种原因,两个 HTTP 请求都没有出现。
关于这个主题已经写了很多文章,我尝试了一些方法,但到目前为止还没有成功。它们都描述了通过 Fiddler 代理(即 localhost:8888)路由请求。
我在 ASP 代码中使用这个对象:
Set httpRequest = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")
对于 IIS 7(在 Windows 7 上),可以在 DOS 中设置代理,如下所示:
netsh winhttp set proxy localhost:8888
在这样的代码中(这可能不适用于除 v6 之外的“MSXML2.ServerXMLHTTP”其他版本):
httpRequest.setProxy 2, "http=localhost:8888", ""
Java代码使用Apache HttpClient,并根据manual代理可以这样设置:
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpHost proxy = new HttpHost("localhost", 8888);
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
我在 main() 方法的开头添加了这段代码。该代码在 Eclipse (Juno) 内运行。
我还在浏览器中打开了代理地址(http://localhost:8888/),它显示了“Fiddler Echo Service”页面。 Fiddler 设置为显示“所有进程”。
仍然没有出现两个 HTTP 请求。唯一显示的是我运行的 ASP 页面 (http://localhost:8082/test.asp),它执行 HTTP 请求。当我使用浏览器时,Fiddler 上会显示其他内容,所以我知道它正在工作。
有人有什么想法吗?
最佳答案
我原本以为是因为两个程序在 Fiddler 上都没有显示任何内容,所以 Fiddler 出了问题。
但这两个程序都出了问题。对于 ASP 代码,setProxy 必须这样调用:
xmlhttp.setProxy 2, "http://127.0.0.1:8888", ""
所以用“::/”代替“=”
在 Fiddler 中显示 Java 代码中的 Apache HttpClient 请求非常复杂,因为请求是使用 https 协议(protocol)发送的。尽管我尝试了几种建议的解决方案,但我无法让它发挥作用。
最后我发现添加
-Djavax.net.debug=all
作为虚拟机的参数,向我展示了我需要的内容,即正在发送的 header 。
关于java - 某些 HTTP 请求不会显示在 Fiddler 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13634593/