Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > Хочу скачать страницу через прокси


Автор: Dweep 17.6.2008, 21:09
Раньше немного программировал на джава,  потом перешел на пхп, сейчас понадобилось написать програмку на джаве.

Нужен код, что б скачать страницу через прокси, собственно вопрос

Код


                URL url = new URL("http://google.com/search?q=info:http://azov.kiev.ua");
        BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
        String line = null;
        StringBuffer buffer = new StringBuffer();
        while ((line = reader.readLine()) != null) {
            buffer.append(line);
            buffer.append("\n");
        }
        System.out.println(buffer);



этот код выдает 

Код

Exception in thread "main" java.io.IOException: Server returned HTTP response code: 403 for URL: http://www.google.com/search?q=info:http://azov.kiev.ua
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at java.net.URL.openStream(Unknown Source)
    at test.main(test.java:107)



Причем если скачивать страницу http://google.com - работает нормально.  

Нужен код, который сможет скачать эту страницу с использованием прокси- сервера (адреса прокси серверов есть).


Автор: AlexeyVorotnikov 18.6.2008, 10:43
Код

SocketAddress proxyAddress = new InetSocketAddress("192.168.0.1", 8080);
Proxy proxy = new Proxy(Proxy.Type.HTTP, proxyAddress);
URL url = new URL("http://google.com/search?q=info:http://azov.kiev.ua");
URLConnection urlConnection = url.openConnection(proxy);
InputStream inputStream = urlConnection.getInputStream();

Или использовать HttpClient.

Автор: Dweep 19.6.2008, 20:31
Чет не работает ничего.

Это код 

Код

                                SocketAddress proxyAddress = new InetSocketAddress("193.191.145.30", 80);
                Proxy proxy = new Proxy(Proxy.Type.HTTP, proxyAddress);
                URL url = new URL("http://google.com/search?q=info:http://azov.kiev.ua");
                URLConnection urlConnection = url.openConnection(proxy);
                InputStream input = urlConnection.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(input));
                String line = null;
                while ((line = reader.readLine()) != null) {
                    System.out.println(line);
                }
                input.close();


Выкидывает эксепшн 


Код

java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(Unknown Source)
    at java.net.PlainSocketImpl.connectToAddress(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$4.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.<init>(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)end

    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at LoadThread.run(LoadThread.java:31)



Пока осилил такое написать

   
Код

                             Socket socket = new Socket("google.com", 80);
                OutputStream output = socket.getOutputStream();    
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output));                
                writer.write(request);
                writer.flush();
                InputStream input = socket.getInputStream();                
                BufferedReader reader = new BufferedReader(new InputStreamReader(input));
                String line = null;
                while ((line = reader.readLine()) != null) {
                    System.out.println(line);
                }
                input.close();
                socket.close();    

где request - HTTP-заголовок, считывается с файла.
Но этот код выдает русские буквы в непонятной кодировке, и я не разобрался как скачивать страницу через proxy.

Напишите рабочий код, который загрузит страницу http://google.com/search?q=info:http://azov.kiev.ua через прокси, и выведет ее код на экран в нормальной кодировке. 
Написавшему вышлю вознеграждение в размере 10wmz.


Автор: Dweep 23.6.2008, 15:23
Уже почти разобрался во всем. 
Осталась проблема, если пишу порт и адрес работающего прокси

Код

systemProperties.setProperty("http.proxyHost","85.19.70.82");
systemProperties.setProperty("http.proxyPort","80");


то программа работает коректно, а если написать адрес или порт неправильно, или прокси недоступен - то программа загружает информацию через мой адрес.

Код

systemProperties.setProperty("http.proxyHost","85.19.70.82");
systemProperties.setProperty("http.proxyPort","802");


Как написать, что б если прокси недоступен - то сообщать ине об этом, а не загружить инфу  с моего IP ? 

Автор: LSD 23.6.2008, 15:35
Цитата(Dweep @  23.6.2008,  16:23 Найти цитируемый пост)
Как написать, что б если прокси недоступен - то сообщать ине об этом, а не загружить инфу  с моего IP ? 

Используй код AlexeyVorotnikov. Или попытайся вначале установить сокетное соединение с прокси сервером (хотя это менее надежно).

Автор: Dweep 23.6.2008, 21:50
Спасибо, разобрался. действительно код AlexeyVorotnikov помог.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)