Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/16: Рейтинг темы: голосов - 16, средняя оценка - 4.88
не Администратор ^_^
 Аватар для Unick
988 / 223 / 23
Регистрация: 03.05.2009
Сообщений: 1,493
Записей в блоге: 1

proxy

11.03.2013, 16:37. Показов 3343. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проблема с прокси сервером.
Значит мы от браузера получаем:
GET https://www.cyberforum.ru/ HTTP/1.1
Host: www.cyberforum.ru
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
и дальше то, что мы видим в коде
  • читаем что нам прислал браузер, выдергиваем от туда host
  • отправляем то, что нам дал браузер сокетами на host
  • получаем ответ от сервера
  • отдаем ее браузеру

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
private ManagerProxy(Socket s) throws Exception {
        this.s = s;
        // и запускаем новый вычислительный поток (см. ф-ю run())
        setDaemon(true);
        setPriority(NORM_PRIORITY);
        start();
    }
    public void run() {
        try {
            // из сокета клиента берём поток входящих данных
            InputStream is = s.getInputStream();
            // и оттуда же - поток данных от сервера к клиенту
            OutputStream os = s.getOutputStream();
 
            // буффер данных в 64 килобайта
            byte buf[] = new byte[64 * 1024];
            // читаем 64кб от клиента, результат - кол-во реально принятых данных
            int r = is.read(buf);
 
            // создаём строку, содержащую полученую от клиента информацию
            String request = new String(buf, 0, r);
            String otvet = "";
            if (request.indexOf("GET ", 0) == 0) {
                Pattern p1 = Pattern.compile("Host: (.*?)\r\n");
                Matcher m1 = p1.matcher(request);
                m1.find();
                ///
              System.out.println(request); ///
                ///
                BufferedReader in = null;
                Socket Socket = new Socket(m1.group(1), 80);
                Socket.getOutputStream().write(request.getBytes());
                in = new BufferedReader(new InputStreamReader(Socket.getInputStream()));
                String input;
                while ((input = in.readLine()) != null) {
                    otvet += input + "\r\n";
                    //System.out.println(input);
                }
                in.close();
            }
            os.write(otvet.getBytes());
            os.close();
            // завершаем соединение
            s.close();
        } catch (Exception e) {
            System.out.println("init error: " + e);
        } // вывод исключений
    }
Вроде все просто... Но...
ошибка 1: нереально долго открывает страницы
ошибка 2: не грузит тяжелые страницы (пример cyberforum.ru), а вот простенькие, через силу открывает
Может я что-то забыл очистить или не правильно подошел к делу?
ах да, еще есть 3-я ошибка
ошибка 3: yandex не открывает, браузер (мозила) пишет что
Ошибка в типе содержимого

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

Пожалуйста, свяжитесь с владельцами веб-сайта и проинформируйте их об этой проблеме.
gzip?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.03.2013, 16:37
Ответы с готовыми решениями:

Отражение, прокси-объекты. Переменная proxy не отдает Test.Get()
Доброго времени суток. Ковыряю сабж. Сделал по примеру из учебника, однако переменная proxy не отдает мне Test.get(). Не могу никак понять,...

Hibernate + could not initialize proxy - no Session
Есть вот такой метод: @Override public Collection getAllCategories() { List<Category> categories = null; ...

Прозрачное кэшированние изображения (Proxy паттерн)
Определить спецификации классов и реализацию методов для манипулирования изображениями большого размера с возможностью прозрачного...

7
не Администратор ^_^
 Аватар для Unick
988 / 223 / 23
Регистрация: 03.05.2009
Сообщений: 1,493
Записей в блоге: 1
14.03.2013, 17:54  [ТС]
проблемы не решил

Добавлено через 1 час 24 минуты
я сейчас заметил что
Java
1
2
3
4
                while ((input = in.readLine()) != null) {
                    otvet += input + "\r\n";
                    System.out.println(input);
                }
после получения всего содержимого думает секунд 10-15
чем можно заменить?
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
14.03.2013, 18:45
ждите не null а </html> кейс инсенситив
0
не Администратор ^_^
 Аватар для Unick
988 / 223 / 23
Регистрация: 03.05.2009
Сообщений: 1,493
Записей в блоге: 1
14.03.2013, 19:23  [ТС]
mutagen, невозможно, а если он будет грузить css или js файл?
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
14.03.2013, 20:00
ну тогда получайте с сервера contentLength и вычитывайте не построчно а побайтно с буферизацией пока не вытащите всё

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
private int tryGetFileSize(URL url) {
        HttpURLConnection conn = null;
        try {
            conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("HEAD");
            conn.getInputStream();
            return conn.getContentLength();
        } catch (IOException e) {
            return -1;
        } finally {
            conn.disconnect();
        }
    }
1
не Администратор ^_^
 Аватар для Unick
988 / 223 / 23
Регистрация: 03.05.2009
Сообщений: 1,493
Записей в блоге: 1
14.03.2013, 22:42  [ТС]
Java
1
2
3
4
5
6
7
8
9
// получаем юрл
Pattern p1 = Pattern.compile("GET (.*?) ");
Matcher m1 = p1.matcher(request);
m1.find();
// получаем длину
int a = tryGetFileSize(new URL(m1.group(1)));
///////////
// как считать побайтно? HttpURLConnection дас ответ сервера мол: 200 OK??
///////////
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
15.03.2013, 14:36
я делал так
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
    private void downloadFile(URL url, File file) {
        HttpURLConnection connection = null;
        try {
            connection = (HttpURLConnection) url.openConnection();
        } catch (IOException e) {
            error(e);
        }
 
        if (connection != null) {
            int downloaded = 0;
            if (file.exists()) {
                downloaded = (int) file.length();
                connection.setRequestProperty("Range",
                        "bytes=" + (file.length()) + "-");
            }
            connection.setDoInput(true);
            connection.setDoOutput(true);
            BufferedInputStream in = null;
            BufferedOutputStream bout = null;
            FileOutputStream fos = null;
            try {
                in = new BufferedInputStream(connection.getInputStream());
            } catch (IOException e) {
                error(e);
            }
            try {
                fos = (downloaded == 0) ? new FileOutputStream(file)
                        : new FileOutputStream(file, true);
            } catch (FileNotFoundException e) {
                error(e);
            }
            int fileLength = connection.getContentLength();
            bout = new BufferedOutputStream(fos, 1024);
            byte[] data = new byte[1024];
            int x = 0;
            try {
                while ((x = in.read(data, 0, 1024)) >= 0) {
                    bout.write(data, 0, x);
                    downloaded += x;
                    resultData.putInt("progress1",
                            (int) (downloaded * 100 / fileLength));
                    if (resultData != null)
                        receiver.send(UPDATE_PROGRESS, resultData);
                }
            } catch (IOException e) {
                error(e);
            } finally {
                if (bout != null)
                    try {
                        bout.close();
 
                    } catch (IOException e) {
                        error(e);
                    }
                if (fos != null)
                    try {
                        fos.close();
                    } catch (IOException e) {
                        error(e);
                    }
                if (in != null)
                    try {
                        in.close();
                    } catch (IOException e) {
                        error(e);
                    }
            }
            resultData.putInt("progress1", 100);
            if (resultData != null)
                receiver.send(UPDATE_PROGRESS, resultData);
        }
    }
1
0 / 0 / 0
Регистрация: 08.02.2010
Сообщений: 3
17.03.2013, 11:55
http://ns313354.ovh.net/download.html
тут реалезованы классы ServerHTTPThreadProxy , ProxiesManager, Proxy
так же посмотреть моно тут
https://github.com/search?l=Ja... positories
и тут
http://sourceforge.net/directo... d/?q=proxy
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.03.2013, 11:55
Помогаю со студенческими работами здесь

LWP proxy ошибка Error: 407 Proxy authentication required
Есть скрипт: #!/usr/bin/perl use LWP::UserAgent; $ua = LWP::UserAgent-&gt;new; $ua-&gt;agent('Mozilla/9.0'); $ua-&gt;proxy('http'...

Proxy - выдает ошибку HTTP/1.0 407 PROXY AUTHENTICATION REQUIRED
что не так :angry: ? IdHTTP1.ProxyParams.ProxyServer :='прокси'; IdHTTP1.ProxyParams.ProxyPort :=порт; IdHTTP1.GET('URL'); ...

Прорыв через ISA proxy ошибку HTTP/1.1 407 Proxy Authentication Required
мой клиент на си++ по http протоколу общается с моим же сервром. Если на пути тупое прокси, то всё работает, но если через ISA - кабздец,...

WebReqest.Proxy, IE и WebBrowser proxy
господа, ситуация следующая: есть кусок кода, который создает запрос и получает ответ, потом этот ответ передает в WebBrowser и тогда уже...

Proxy
подскажите хорошие сервисы предоставляющие proxy ( желательно бесплатные ) , так как они будут использоваться для мелких запросов через...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru