2

我正在将用于从 Java 访问 Web 商店的 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,根据手册,代理可以这样设置:

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 上会显示其他内容,所以我知道它正在工作。

有人有什么想法吗?

4

1 回答 1

2

我最初认为,因为这两个程序都没有出现在 Fiddler 上,所以 Fiddler 出了点问题。

但是这两个程序都有问题。对于 ASP 代码,setProxy 必须像这样调用:

xmlhttp.setProxy 2, "http://127.0.0.1:8888", ""

所以“::/”而不是“=”

在 Fiddler 中显示 Java 代码中的 Apache HttpClient 请求非常复杂,因为请求是使用 https 协议发送的。尽管我尝试了几种建议的解决方案,但我无法让它发挥作用。

最后我发现添加

-Djavax.net.debug=all

作为 VM 的参数,向我展示了我需要的内容,即正在发送的标头。

于 2012-12-04T12:33:22.000 回答