プロキシ サーバーを作成しようとしています。
画像やその他すべてのものを表示できるように、ウェブサイトをバイト単位で読みたいと思っています。readLine を試しましたが、画像を表示できません。コードを変更して DataOutputStream オブジェクトを含むすべてのデータを browser に送信する方法について何か提案はありますか?
try{
Socket s = new Socket(InetAddress.getByName(req.hostname), 80);
String file = parcala(req.url);
DataOutputStream out = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader dis = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter socketOut = new PrintWriter(s.getOutputStream());
socketOut.print("GET "+ req.url + "\n\n");
//socketOut.print("Host: "+req.hostname);
socketOut.flush();
String line;
while ((line = dis.readLine()) != null){
System.out.println(line);
}
}
catch (Exception e){}
}
編集部分
これは私がしなければならないことです。禁止された Web サイトはブロックできますが、プログラムで他の Web サイトを許可することはできません。
フィルター プログラムでは、指定したポートで TCP ソケットを開き、接続を待ちます。リクエストが来ると (つまり、クライアントが Web サイトにアクセスするための URL を入力すると)、アプリケーションはそれを処理してアクセスを許可するかどうかを決定し、同じソケットを使用してクライアントに応答を返します。クライアントが WebPolice への接続を開いた後 (そして要求がチェックされて許可された後)、実際の Web ページをクライアントに表示する必要があります。したがって、ユーザーはすでに要求を出しているので、今度は WebPolice が要求を転送して、ユーザーが Web ページを取得できるようにする番です。したがって、WebPolice はクライアントとして機能し、Web ページを要求します。これは、(ユーザーへの接続を閉じずに) Web サーバーへの接続を開き、この接続を介してリクエストを転送する必要があることを意味します。返信を受け取り、それをクライアントに転送します。スレッドを使用して複数の接続を処理します (同時におよび/または異なる時間に)。