我正在重写用于从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
在这样的代码中(这可能不适用于其他版本的“MSXML2.ServerXMLHTTP”而不是v6):
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上,所以我知道它正在工作。
有人有任何想法吗?
答案 0 :(得分:1)
我原本以为,因为Fiddler没有出现这两个节目,Fiddler出了点问题。
但这两个项目都出了问题。对于ASP代码,setProxy必须像这样调用:
xmlhttp.setProxy 2, "http://127.0.0.1:8888", ""
所以“:: /”而不是“=”
在Fiddler中显示的Java代码中的Apache HttpClient请求非常复杂,因为请求是使用https协议发送的。虽然我尝试了几种提议的解决方案,但我无法让它发挥作用。
最后我发现添加了
-Djavax.net.debug=all
作为VM的参数向我展示了我需要的东西,即正在发送的标题。