Azure存储Blob:https://(storageAccountName).blob.core.windows.net / vhd?restype = container& comp = list无法使用代理

时间:2016-07-05 03:20:03

标签: java azure azure-storage-blobs

为了获取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,我们将获得有效的响应并且它正在运行。

2 个答案:

答案 0 :(得分:1)

根据我的经验,通常,使用squid作为后端服务的反向代理,但是在这里你想通过squid作为转发代理访问存储REST API。您可以参考维基页面https://en.wikipedia.org/wiki/Proxy_server,SO主题Difference between proxy server and reverse proxy serverblog来了解两者之间的差异。

因此问题的解决方案是将代理服务器配置为转发代理。

  1. 对于Squid,您可以尝试引用squid wiki页面http://wiki.squid-cache.org/SquidFaq/ConfiguringSquidhttp://wiki.squid-cache.org/Features/HTTPS,以了解如何使用HTTPS配置forword代理。

  2. 对于Apache,您可以尝试参考apache文档页面http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#forwardreverse来执行此操作。

  3. 然后,在成功设置转发代理后,设置Java的系统属性以启用代理支持。

    支持Java代理有两种方式。

    1. 命令行JVM设置:代理设置通过命令行参数提供给JVM:

      java -Dhttp.proxyHost=proxyhostURL -Dhttp.proxyPort=proxyPortNumber -Dhttp.proxyUser=someUserName -Dhttp.proxyPassword=somePassword HelloWorldClass
      
    2. 在代码中设置系统属性:在Java代码中添加以下行,以便JVM使用代理进行HTTP调用。

      System.setProperty("http.proxyPort", "someProxyPort");
      System.setProperty("http.proxyUser", "someUserName");
      System.setProperty("http.proxyPassword", "somePassword");
      System.setProperty("http.proxyHost", "someProxyURL");
      
    3. 有关网络和联网的更多信息代理人和Java中的属性,请参阅http://docs.oracle.com/javase/7/docs/technotes/guides/net/proxies.htmlhttp://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html

答案 1 :(得分:1)

我们得到了解决方案。问题是我们一次调用所有存储帐户的异步调用。例如:如果我们有5个存储帐户,每个存储帐户有5个vhd容器,并且如果我们一次调用所有5个并且回调等待5个响应,则为for循环,在这种情况下它不起作用。所以我们分别调用每个调用,它开始工作。