为了获取blob容器的详细信息,我们使用下面提到的REST API。 Vhd是blob容器名称。
https://(storageAccountName).blob.core.windows.net/vhd?restype=container&comp=list
当我们使用代理服务器详细信息(例如:SQUID代理)访问存储REST API调用时,我们收到以下提到的错误。
Blob的HttpResponse ::
ResourceNotFound
指定的资源不存在。 的requestId:6dc7e6f2-0001-000d-30f9-d56eb3000xxx
如果我们在没有代理服务器的情况下访问相同的rest api,我们将获得有效的响应并且它正在运行。
答案 0 :(得分:1)
根据我的经验,通常,使用squid作为后端服务的反向代理,但是在这里你想通过squid作为转发代理访问存储REST API。您可以参考维基页面https://en.wikipedia.org/wiki/Proxy_server,SO主题Difference between proxy server and reverse proxy server和blog来了解两者之间的差异。
因此问题的解决方案是将代理服务器配置为转发代理。
对于Squid,您可以尝试引用squid wiki页面http://wiki.squid-cache.org/SquidFaq/ConfiguringSquid和http://wiki.squid-cache.org/Features/HTTPS,以了解如何使用HTTPS配置forword代理。
对于Apache,您可以尝试参考apache文档页面http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#forwardreverse来执行此操作。
然后,在成功设置转发代理后,设置Java的系统属性以启用代理支持。
支持Java代理有两种方式。
命令行JVM设置:代理设置通过命令行参数提供给JVM:
java -Dhttp.proxyHost=proxyhostURL -Dhttp.proxyPort=proxyPortNumber -Dhttp.proxyUser=someUserName -Dhttp.proxyPassword=somePassword HelloWorldClass
在代码中设置系统属性:在Java代码中添加以下行,以便JVM使用代理进行HTTP调用。
System.setProperty("http.proxyPort", "someProxyPort");
System.setProperty("http.proxyUser", "someUserName");
System.setProperty("http.proxyPassword", "somePassword");
System.setProperty("http.proxyHost", "someProxyURL");
有关网络和联网的更多信息代理人和Java中的属性,请参阅http://docs.oracle.com/javase/7/docs/technotes/guides/net/proxies.html和http://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html。
答案 1 :(得分:1)
我们得到了解决方案。问题是我们一次调用所有存储帐户的异步调用。例如:如果我们有5个存储帐户,每个存储帐户有5个vhd容器,并且如果我们一次调用所有5个并且回调等待5个响应,则为for循环,在这种情况下它不起作用。所以我们分别调用每个调用,它开始工作。