1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Proxy для HttpURLConnection

Тема в разделе "Разработка плагинов для новичков", создана пользователем makssof, 22 июн 2014.

Статус темы:
Закрыта.
  1. Автор темы
    makssof

    makssof Старожил Девелопер Пользователь

    Баллы:
    103
    Вообще не пойму я, почему не работает?
    Код:
    URL url = new URL(request);
    Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(213.85.92.10, 80));
    HttpURLConnection connection = (HttpURLConnection)url.openConnection(proxy);
    Если я:
    Код:
    InputStream algIn = connection.getURL().openStream();
    StringWriter algSB = new StringWriter();
    while(algIn.available() > 0) algSB.write(algIn.read());
    То algSB.toString() будет такой, какой был бы БЕЗ прокси. В чекере проксей проверил прокси - рабочий. Другие рабочие прокси ставил - шиш. Вообще странно. Как мне получать содержимое через прокси?

    Призываю силу света:
    @fromgate , @Den_Abr , @BeYkeR , @JustBlender , @Ission , @Hilgert , @Shevchik
     
    Последнее редактирование: 23 июн 2014
  2. Автор темы
    makssof

    makssof Старожил Девелопер Пользователь

    Баллы:
    103
    Эх... Ладно, пойду на кибер форум.
    И всё таки подожду ещё чуть чуть тут. :)
     
    Последнее редактирование: 23 июн 2014
  3. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    connection.getURL().openStream(); Вот в этом проблема.
    Проследи за логикой выполнения своего кода внимательно. А заодно и внутрь стандратных классов загляни, сразу поймёшь почему игнорируется прокси.
     
  4. Автор темы
    makssof

    makssof Старожил Девелопер Пользователь

    Баллы:
    103
    Окей, прочитал я в доке вот что:
    мол, обработчики, которые не поддерживают прокси, будут игнорить их. Это как раз про connection.getURL().openStream() , я прав?
    Но я ещё пробовал connection.getInputStream() , он вызывает
    java.net.ConnectException: Connection refused: connect
    at java.net.TwoStacksPlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at sun.net.NetworkClient.doConnect(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient$1.run(Unknown Source)
    at sun.net.www.http.HttpClient$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.net.www.http.HttpClient.privilegedOpenServer(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
    at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at Main.main(Main.java:45)
    Хочу заметить: вызывает он этот эксцепшн если я передам .openConnection()'y параметр типа Proxy. Если же я не буду передавать ему прокси, .getInputStream() будет работать нормально.
    Так всё таки, как мне сделать получение содержимого через прокси? Можно примерчик? Позязя. :)

    P.S. У меня в эклипсе есть плагин, которые исправляет Source not found. Он просто декомпилит тот класс, который я хочу посмотреть. Я это к чему: я смотрел "кишки" классов, но всё равно не очень понял. :(
     
  5. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Вот что ты делаешь: ты создаёшь новый connection внутрь которого пихаешь урл, а потом просто снова забираешь этот урл и открываешь соединение.

    Таким образом такая фигня
    URL url = new URL(request);
    Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(213.85.92.10, 80));
    HttpURLConnection connection = (HttpURLConnection)url.openConnection(proxy);
    InputStream algIn = connection.getURL().openStream();
    упрощается до такого.
    URL url = new URL(request);
    InputStream algIn = connection.getURL().openStream();

    И тут сразу понятно что прокси сервер ты нигде не используешь.
    Почему именно так? Просто потому что getURL() возвращает вот этот объект HttpURLConnection connection = (HttpURLConnection)url.openConnection(proxy);

    А ошибка в методе getInputStream() показывает что прокся отказала в соединении.
     
  6. Автор темы
    makssof

    makssof Старожил Девелопер Пользователь

    Баллы:
    103
    Т.е. вариант с getInputStream() верный, просто прокся "не катит"?
    Или?..
    Да, я тугой. (
     
  7. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Вариант верный, но прокся не катит.
     
  8. Автор темы
    makssof

    makssof Старожил Девелопер Пользователь

    Баллы:
    103
    Поменял проксю - заработало! Спасибо @Shevchik что помог. :)
     
  9. JustBlender

    JustBlender Старожил Девелопер Пользователь

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Лол, мне оповещения даже не приходили :c Мог бы помочь..
     
  10. Автор темы
    makssof

    makssof Старожил Девелопер Пользователь

    Баллы:
    103
    Это моя ошибка, я кое как там накосячил с "призывом". Но главное что я уже решил проблему. Только вот тему забыл закрыть. :)
     
Статус темы:
Закрыта.

Поделиться этой страницей