通过代理访问时,HttpURLConnection返回503错误

时间:2012-09-04 14:11:08

标签: java http-status-code-503 brightcove

我正在为在Brightcove视频云上托管视频的网站创建视频站点地图。为了从网站上获取所有视频信息,Brightcove建议从他们的以下表格的网址阅读回复

http://api.brightcove.com/services/library?token="+accountToken+"&page_size=1&command=find_all_videos&output=JSON&get_item_count=true

网址的输出是JSON,其中accountToken只是帐户的标识符。

当我在浏览器中使用Token点击上面的url时,它会给我正确的响应。

我在下面写了一个程序片段来读取该网址

URL jsonURL = new URL("http://api.brightcove.com/services/library?token="+accountToken+"&page_size=1&command=find_all_videos&output=JSON&get_item_count=true");
        HttpURLConnection connection = (HttpURLConnection) jsonURL.openConnection();
        connection.setRequestMethod("GET");
        connection.connect();
        BufferedReader reader = new BufferedReader(
                new InputStreamReader(connection.getInputStream()));
        String lineRead = "";
        while (reader.ready()) {
            lineRead = lineRead + reader.readLine();
        }

由于我的浏览器使用代理,我添加了以下代码以包含代理设置

        System.setProperty("http.proxyHost", "my.proxyurl.com");
        System.setProperty("http.proxyPort", "80");

在不使用代理设置的情况下,它会返回java.net.ConnectException: Connection refused: connect,而代理会向我提供java.io.IOException: Server returned HTTP response code: 503

所以我的问题是,为什么它给我一个503(服务不可用)错误?从浏览器中可以正常工作。

更新1: 这似乎是网络的一个问题。我ping了域名,它说“请求超时”。但是通过HTTP工作。看起来像防火墙的问题。

2 个答案:

答案 0 :(得分:3)

我认为,这可能是由于您的互联网连接,我已经尝试过您的代码我没有得到任何503(Service Unavailable)。检查与不同的连接连接(没有代理),它应该工作。或者您可以尝试稍微不同的方法:

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("host", "port));
conn = new URL(jsonURL).openConnection(proxy);

如果您有SOCKS类型代理,请将Proxy的构造函数参数更改为Proxy.Type.SOCKS

答案 1 :(得分:0)

对Jamas代码的小修正

String host="myproxy.com";
int port=8080;
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(host, port));