Форум программистов, компьютерный форум, киберфорум
Java: Сети
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
83 / 82 / 8
Регистрация: 31.03.2015
Сообщений: 444
1

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

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


Написать приложение, которое работает как прокси-сервер http. Должна быть возможность удаленного конфигурирования приложения в процессе работы + программа конфигуратор.
Приложение состоит из одного процесса-сервера, который работает на указанном TCP порте, и слушает на нем подключения от браузеров. Также нужно добавить функционал, который позволяет определенным клиентам посещать определенные страницы и наоборот. Подскажите, где можно найти хорошый учебник, ссылки, материалы, подсказки и тому подобное на эту тему?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.01.2016, 13:59
Ответы с готовыми решениями:

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

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

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

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

5
Эксперт Java
2361 / 2191 / 559
Регистрация: 28.12.2010
Сообщений: 8,578
16.01.2016, 14:15 2
Vaderkos, читайте как устроенны сети, запросы\ответы. Определитесь какие технологии вы хотите использовать и читайте про них. Продумайте архитектуру решения. Погуглите примеры. Может на их основе что-то сделаете
Например
http://www.java2s.com/Code/Jav... server.htm
http://www.jtmelton.com/2007/1... xy-server/
1
83 / 82 / 8
Регистрация: 31.03.2015
Сообщений: 444
17.01.2016, 00:49  [ТС] 3
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
2361 / 2191 / 559
Регистрация: 28.12.2010
Сообщений: 8,578
17.01.2016, 01:28 4
Vaderkos, раз не принимает, значит что-то все же не работает. Включайте дебаг и смотрите. Судя по коду у вас одноразовый прокси вообще. Второй реквест уже будет некому обрабатывать.
0
83 / 82 / 8
Регистрация: 31.03.2015
Сообщений: 444
17.01.2016, 18:23  [ТС] 5
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 6
Лучший ответ Сообщение было отмечено Vaderkos как решение

Решение

в коммент кинь строку 55 и 62 . И будет работать
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.01.2016, 20:11

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

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

HTTP Error 502: Bad Gateway, без прокси всё работает
вот код import urllib2 inputs = raw_input('input request') urls =...

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

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

разработать приложение-сервер, которое публикует ленты новостей RSS
Мне требуется разработать приложение-сервер, которое публикует ленты новостей RSS. Обращение к...

Почему не работает прокси сервер?
Всем привет, подключил бесплатный прокси сервер (проверял через специальный сайт, он рабочий), а на...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.