Подключиться к сайту, используя прокси-код в Java - PullRequest
4 голосов
/ 14 июня 2010

Я хочу подключиться как сайт через прокси в Java.Это код, который я написал:

public class ConnectThroughProxy 
{
    Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("proxy ip", 8080));
    public static void main(String[] args) 
    {
        try
        {
            URL url = new URL("http://www.rgagnon.com/javadetails/java-0085.html");
            URLConnection connection=url.openConnection();
            String encoded = new String(Base64.encode(new String("user_name:pass_word").getBytes()));
            connection.setDoOutput(true);
            connection.setRequestProperty("Proxy-Authorization","Basic "+encoded);
            String page="";
            String line;
            StringBuffer tmp = new StringBuffer();
            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            while ((line=in.readLine()) != null)
            {
                page.concat(line + "\n");
            }
            System.out.println(page);
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
    }

При попытке запустить этот код он выдает следующую ошибку:

java.lang.IllegalArgumentException: недопустимые символыв значении заголовка сообщения: Basic dXNlcl9uYW1lOnBhc3Nfd29yZA ==
в sun.net.www.protocol.http.HttpURLConnection.checkMessageHeader (HttpURLConnection.java:323)
в sun.net.wwtp.proper(HttpURLConnection.java:2054)
на test.ConnectThroughProxy.main (ConnectThroughProxy.java:30)

Есть идеи, как это сделать?

Ответы [ 3 ]

11 голосов
/ 14 июня 2010

Если вы просто пытаетесь отправлять HTTP-запросы через прокси-сервер HTTP, вам не нужно прилагать столько усилий. Здесь есть рецензия: http://java.sun.com/javase/6/docs/technotes/guides/net/proxies.html

Но это сводится к тому, чтобы просто установить свойства среды http.proxyHost и http.proxyPort, либо в командной строке, либо в коде:

// Set the http proxy to webcache.mydomain.com:8080
System.setProperty("http.proxyHost", "webcache.mydomain.com");
System.setProperty("http.proxyPort", "8080");

// Next connection will be through proxy.
URL url = new URL("http://java.sun.com/");
InputStream in = url.openStream();

// Now, let's 'unset' the proxy.
System.clearProperty("http.proxyHost");

// From now on HTTP connections will be done directly.
4 голосов
/ 22 января 2013

Мне кажется, что вы вообще не используете свой экземпляр Proxy.Я думаю, вы должны передать его при создании URLConnection instance:

URLConnection connection=url.openConnection(proxy);

Установка свойств среды http.proxy проще и при использовании некоторых сторонних библиотекбез передачи экземпляра прокси-сервера поддерживается только возможное решение, но его недостатком является то, что он устанавливается глобально для всего процесса.

2 голосов
/ 25 июня 2013

Я использовал API данных Google, и единственный способ получить настройки прокси-сервера состоял в том, чтобы предоставить ВСЕ параметры, относящиеся к прокси, даже при том, что они установлены пустыми:

/usr/java/jdk1.7.0_04/bin/java -Dhttp.proxyHost=10.128.128.13 
    -Dhttp.proxyPassword -Dhttp.proxyPort=80 -Dhttp.proxyUserName 
    -Dhttps.proxyHost=10.128.128.13 -Dhttps.proxyPassword -Dhttps.proxyPort=80 
    -Dhttps.proxyUserName com.stackoverflow.Runner

Там, где имя пользователя и пароль НЕ требуются, и одни и те же серверы http и https устанавливаются такими же, как и номер порта (если это также ваш случай). Обратите внимание, что тот же HTTP-прокси также предоставляется в качестве сервера HTTPS, а также номер его порта (ссылка https://code.google.com/p/syncnotes2google/issues/detail?id=2#c16).

Если ваш класс Java имеет экземпляр класса "URL", он должен выбрать эти конфигурации ...

...