HttpURLConnection возвращает ошибку 503 при доступе через прокси

Я работаю над созданием карты сайта для видео для сайта, на котором размещены видео в видеооблаке Brightcove. Чтобы получить всю информацию о видео с сайта, Brightcove предлагает прочитать ответ со своего URL-адреса в следующей форме.

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

вывод URL-адреса находится в формате JSON, где accountToken — это просто идентификатор учетной записи.

Когда я нажимаю указанный выше URL-адрес с помощью 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: похоже, проблема с сетью. Я пропинговал домен, и он сказал: «Время ожидания запроса истекло». Но работает через HTTP. Похоже на проблему с брандмауэром.


person Shashank Kadne    schedule 04.09.2012    source источник
comment
@jtahlborn: обратный прокси. В каком контексте вы это спрашиваете?   -  person Shashank Kadne    schedule 06.09.2012
comment
Можете ли вы предоставить временный тестовый аккаунтToken?   -  person Õzbek    schedule 06.09.2012
comment
возможно, это прокси-сервер socks? какой-то другой прокси?   -  person jtahlborn    schedule 06.09.2012
comment
@JamshidAsatillayev: Просто удалите параметр токена и попробуйте. Он вернет JSON с сообщением об ошибке. но это тоже не работает.   -  person Shashank Kadne    schedule 06.09.2012
comment
@jtahlborn: я действительно не знаю. что, если это прокси-сервер socks?   -  person Shashank Kadne    schedule 06.09.2012
comment
Вы, вероятно, получаете какое-то тело ответа с ответом 503, указывающим причину. Как минимум, это будет содержать указание на то, возвращается ли 503 прокси-сервером или конечной точкой API. Не могли бы вы попробовать прочитать весь HTTP-ответ и опубликовать его здесь?   -  person Sergey Mikhanov    schedule 12.09.2012
comment
Кроме того, я бы попробовал использовать такой инструмент, как Wireshark, чтобы увидеть входящие и исходящие HTTP-сообщения - возможно, они даже не достигают прокси-сервера или не аутентифицируются им и т. д.   -  person Sergey Mikhanov    schedule 12.09.2012
comment
Я попробовал ваш код (я также за прокси-сервером), и он работал нормально, принимая во внимание эти две строки в ответе Джамшида. Проверьте еще раз, правильно ли вы ввели адрес и порт, правильно ли настроен ваш прокси, нет ли ограничений безопасности и т. д.   -  person Miljen Mikic    schedule 13.09.2012


Ответы (2)


Я думаю, это может быть из-за вашего интернет-соединения, я пробовал ваш код, но не получил 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.

person Õzbek    schedule 06.09.2012
comment
Я уже пробовал этот подход для прокси... но не пробовал с типом Proxy.Type.SOCKS... дайте мне попробовать, и я дам вам знать..... - person Shashank Kadne; 07.09.2012
comment
Не работает. Я получил java.net.SocketException: Malformed reply from SOCKS server. Нет смысла пробовать это в другом соединении без прокси. Я должен заставить его работать в клиентской среде, для которой требуется прокси.. :( - person Shashank Kadne; 10.09.2012
comment
Как вы сказали, это похоже на проблему с сетью. Я добавил обновление к моему вопросу. Ваш ответ, безусловно, заслуживает этой награды. Спасибо. - person Shashank Kadne; 13.09.2012

Незначительное исправление в коде Jamas

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