2011-04-23 11 views
2

私は、javaでプロキシサーバーを書くという割り当てを持っています。 httpヘッダーを読んで変更し、提供されたブラックリストでいくつかのサイトをブロックできる必要があります。すでにJavaでプロキシサーバーをプログラミングする方法

私は、Javaの経験を持っていますが、HTTP、ソケット、接続、ポートなどで働いたことはありません。..

Googleのいくつかの例やチュートリアルを試す日のカップルが、私は見つけることは非常にシンプルかつ丼のいずれかであります完全な能力を持っているか、非常に非常に複雑で働いていない。

関連する例、リンク、チュートリアルなどを教えてもらえますか?

私は、オープンソースのプロキシサーバーを備えたWebページを見つけましたが、実際には機能していないか、非常に複雑であることに気が付きました。

ありがとうございました!

編集:

こんにちは、私は、ブラウザからの接続をリッスンし、すべての接続のための新しいスレッドを開始し、いくつかのコードを発見しました。私は、サーバー(URL)に要求を転送する方法であると、本当に困惑している

public class Main { 
public static void main(String[] args) throws IOException { 
    ServerSocket serverSocket = null; 
boolean listening = true; 

int port = 10000; //default 
try { 
    port = Integer.parseInt(args[0]); 
} catch (Exception e) { 
    //ignore me 
} 

try { 
    serverSocket = new ServerSocket(port); 
    System.out.println("Started on: " + port); 
} catch (IOException e) { 
    System.err.println("Could not listen on port: " + args[0]); 
    System.exit(-1); 
} 

while (listening) { 
    new ProxyThreadServer(serverSocket.accept()).start(); 
} 
serverSocket.close(); 
} 

} 

部分は、それからの応答を取得し、ブラウザに応答を送信します。

だから、基本的に、私は4つのステップが必要です。

Listen and get the request from a browser. 
Forward the request to the web-server. 
Get the response from the web server. 
Send the response to the browser. 

余分な機能をヘッダと協力し、いくつかの接続をブロックしています。しかし、これらの4つのステップを開始するためにはうまくいくでしょう。

+3

これは余りにも終わりがなく、ここで話題になるのは曖昧です。この小さな部分を書く方法について質問がありますか?プロキシサーバーの仕組みを理解していますか? _それは何ですか?_ –

+0

こんにちは、これでいくつかの時間を過ごした後。プロキシの仕組みを理解しています。基本的にブラウザとウェブサイトの真中にあるべきです。双方向チャンネルとして機能する必要があります。基本的な必要性は、透明なトンネルにすることです。余分な機能は、ヘッダーを編集し、いくつかのWebサイトやIPをフィルタリングする機能です。 – Gil

答えて

4

最も簡単な方法は、ServerSocketに新しい接続を受け入れるスレッドを用意することです。接続が(accept呼び出しによって)取得されるたびに、その接続を処理する新しいスレッドを開始します。新しいセッション処理スレッドにaccept呼び出しを介して受け取った新しいSocketを渡します。これがプロキシサーバーの中核です。

これらのセッション処理スレッドのそれぞれについて、クライアントからのHTTP要求を読み取り、その処理方法を決定する必要があります。接続するHTTPサーバーを決定し、作成した新しいSocketオブジェクトを使用してそのサーバーに接続する必要があります。その時点でクライアントとサーバーの間で双方向の転送を行うことができます。そのため、プロキシはどちらの側でも透過的です。

HTTPは複雑な獣ですので、あなたの割り当ての範囲がかなり限定されていることをお勧めします。この場合、この概要が役立ちます。

希望に役立ちます!

+0

最初の段落は、プロキシサーバーだけでなく、実際には(接続ごとのスレッド)サーバーのコアです。 –

+0

ありがとう!それは非常に最初のためにいいですね。私は最初の質問を編集し、いくつかのコードを追加しました。私は本当にあなたが見て、そこから続ける方法を私に案内することができれば感謝します。 – Gil

関連する問題