Аватар для Vaderkos
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447

Приложение, которое работает как прокси-сервер http

16.01.2016, 13:59. Показов 1975. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать приложение, которое работает как прокси-сервер http. Должна быть возможность удаленного конфигурирования приложения в процессе работы + программа конфигуратор.
Приложение состоит из одного процесса-сервера, который работает на указанном TCP порте, и слушает на нем подключения от браузеров. Также нужно добавить функционал, который позволяет определенным клиентам посещать определенные страницы и наоборот. Подскажите, где можно найти хорошый учебник, ссылки, материалы, подсказки и тому подобное на эту тему?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.01.2016, 13:59
Ответы с готовыми решениями:

Как создать приложение, которое блокирует все http сайты?
как создать приложение которое блокирует все http сайты на c#

Как сделать с помощью фильтров в "Политиках безопасности IP чтобы http трафик открывался через прокси сервер?
Здравствуйте. Как сделать так, чтобы http трафик открывался через прокси сервер? Это нужно сделать с помощью фильтров в "Политиках...

Кэширующий HTTP прокси-сервер
Здравствуйте! Нужно проконсультироваться. Необходимо написать кэширующий HTTP прокси-сервер. Почитала про него. Выяснила, что он...

5
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
16.01.2016, 14:15
Vaderkos, читайте как устроенны сети, запросы\ответы. Определитесь какие технологии вы хотите использовать и читайте про них. Продумайте архитектуру решения. Погуглите примеры. Может на их основе что-то сделаете
Например
http://www.java2s.com/Code/Jav... server.htm
http://www.jtmelton.com/2007/1... xy-server/
1
 Аватар для Vaderkos
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
17.01.2016, 00:49  [ТС]
KEKCoGEN, Можете помочь? Тут сам прокси сервер который работает, но браузер почему то не принимает страницу.
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
import java.io.*;
import java.net.Socket;
import java.net.URL;
import java.net.URLConnection;
import java.util.StringTokenizer;
 
public class ProxyServer extends Thread {
    InputStream fromClient = null;
    InputStream fromURL = null;
    DataOutputStream toClient = null;
    DataOutputStream toURL = null;
    Socket socket = null;
    int BUFFER_SIZE = 64*1024;
 
    public ProxyServer(Socket socket) throws Exception {
        this.socket = socket;
    }
 
    public void run(){
        try{
            System.out.println("Goes here1!");
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            toClient = new DataOutputStream(socket.getOutputStream());
            int count = 0;
            String inputLine;
            String urlToCall = null;
 
 
            while ((inputLine = br.readLine()) != null) {
                try {
                    StringTokenizer tok = new StringTokenizer(inputLine);
                    tok.nextToken();
                } catch (Exception e) {
                    break;
                }
                if (count == 0) {
                    String[] tokens = inputLine.split(" ");
                    urlToCall = tokens[1];
                    System.out.println("Request for : " + urlToCall);
                }
                count++;
            }
 
            URL url = new URL(urlToCall);
            URLConnection urlConnection = url.openConnection();
            urlConnection.setDoInput(true);
            System.out.println("Goes here2!");
            fromURL = new DataInputStream(urlConnection.getInputStream());
            byte [] buffer = new byte[BUFFER_SIZE];
            int index = fromURL.read(buffer, 0 , BUFFER_SIZE);
            
            while (index != -1) {
                toClient.write(buffer, 0, index);
                index = fromURL.read(buffer, 0, BUFFER_SIZE);
            }
            toClient.flush();
 
        }catch(Exception any){
            any.printStackTrace();
        }
        System.out.println("End of code");
    }
    public static void main(String[] args) throws Exception{
        ServerSocket serverSocket = new ServerSocket(10000);
        ProxyServer ps = new ProxyServer(serverSocket.accept());
        ps.start();
    }
}
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
17.01.2016, 01:28
Vaderkos, раз не принимает, значит что-то все же не работает. Включайте дебаг и смотрите. Судя по коду у вас одноразовый прокси вообще. Второй реквест уже будет некому обрабатывать.
0
 Аватар для Vaderkos
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
17.01.2016, 18:23  [ТС]
KEKCoGEN, Попробовал вот так
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import java.io.*;
import java.net.HttpURLConnection;
import java.net.Socket;
import java.net.URL;
import java.net.URLConnection;
import java.util.StringTokenizer;
 
public class ClientConnection implements Runnable {
    private Socket clientSocket;
    private int httpPort = 80, bufferSize = 1024*64;
    private InputStream clientInputStream;
    private OutputStream clientOutputStream;
 
    public ClientConnection(Socket clientSocket) throws Throwable{
        this.clientSocket = clientSocket;
        this.clientInputStream = clientSocket.getInputStream();
        this.clientOutputStream = clientSocket.getOutputStream();
    }
 
    @Override
    public void run() {
        try {
            BufferedReader bufferedReader = null;
            InputStream inputStream = null;
            DataOutputStream clientDataOutputStream = new DataOutputStream(clientOutputStream);
            BufferedReader clientBufferedReader = new BufferedReader( new InputStreamReader    (clientInputStream));
            String inputLine, outputLine;
            int cnt = 0;
            String urlToCall = "";
 
            while((inputLine = clientBufferedReader.readLine()) != null){
                try{
                    StringTokenizer tokenizer = new StringTokenizer(inputLine);
                    tokenizer.nextToken();
                }catch(Exception end){
                    break;
                }
                if(cnt == 0){
                    String []tokens = inputLine.split("\\s+");
                    urlToCall = tokens[1];
                    System.out.println(urlToCall);
                }
                cnt++;
            }
 
            try{
                URL url = new URL(urlToCall);
                URLConnection connection = url.openConnection();
                //connection.connect();
                connection.setDoInput(true);
                connection.setDoOutput(false);
 
                HttpURLConnection HUC = (HttpURLConnection) connection;
 
                if(connection.getContentLength() > 0){
                    try {
                        inputStream = connection.getInputStream();
                        bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                    }catch(IOException ioe){
                        ioe.printStackTrace();
                    }
                }
 
                byte buffer[] = new byte[bufferSize];
                int index = inputStream.read(buffer, 0, bufferSize);
 
                while(index != -1){
                    clientDataOutputStream.write(buffer, 0, index);
                    index = inputStream.read(buffer, 0, index);
                }
                clientDataOutputStream.flush();
            }catch(Exception any){
                any.printStackTrace();
                clientDataOutputStream.writeBytes("");
            }
 
            if(bufferedReader != null){
                bufferedReader.close();
            }
            if(inputStream != null){
                inputStream.close();
            }
            if(clientSocket != null){
                clientSocket.close();
            }
        }catch(Exception any){
            any.printStackTrace();
        }
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
import java.net.ServerSocket;
import java.net.Socket;
 
public class Main {
    public static void main(String[] args) throws Throwable{
        ServerSocket serverSocket = new ServerSocket(10000);
        while(true){
            Socket socket = serverSocket.accept();
            System.out.println(socket.getInetAddress() + " connected and was accepted!");
            new Thread(new ClientConnection(socket)).start();
        }
    }
}
Все равно страница не принимается клиентом(
0
1 / 1 / 3
Регистрация: 19.02.2015
Сообщений: 66
17.01.2016, 20:11
Лучший ответ Сообщение было отмечено Vaderkos как решение

Решение

в коммент кинь строку 55 и 62 . И будет работать
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.01.2016, 20:11
Помогаю со студенческими работами здесь

HTTP прокси сервер с поддержкой SSL
Вот интересно - как собственно организовать прокси сервер с поддержкой SSL? C обычным все понятно - браузер шлет заголовок с url. А как...

Как проверить, работает ли прокси-сервер или нет?
Как проверить работает ли прокси сервер ?

HTTP Error 502: Bad Gateway, без прокси всё работает
вот код import urllib2 inputs = raw_input('input request') urls = "http://www.google.com/search?q="+inputs; input = raw_input('input...

Хук работает, пока работает приложение, которое его вызвало
Набросал код, который устанавливает глобальный хук (пусть на нажатие клавиши), процедура для хука расположена в dll, выглядит примерно так:...

Не работает прокси сервер
Доброго времени суток, уважаемые гости этой страницы! Есть код, который принимает HTTP запрос от клиента(читай: браузера) и должен...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru