Java NIOチャネルを使用して単純なプロキシサーバーを実装しましたが、問題があります。一部のサイトは完全に機能しますが、他のサイトでは不明なパスに関するエラーが表示されるか、リソースが存在しないというメッセージが表示されたホスティング事業者のテクニカルページにリダイレクトされます。それは私のせいですか、それとも一部のサイトがプロキシを許可していない可能性がありますか?
ProxyServerは次のように機能します。「localhost」と入力し、ブラウザでコードで設定されたサイトを受け取ります。そして、ブラウザからのリクエストは、次のようにターゲットサイトで再送信するだけです。
private void connect(SelectionKey key) throws IOException {
SocketChannel channel = ((SocketChannel) key.channel());
Attachment attachment = (Attachment) key.attachment();
channel.write(attachment.buffer);
}
したがって、「key」-はターゲットサイトのSelectionKeyであり、attachment.bufferにプロキシサーバーに送信されたリクエストを保存します。
それで、私のコードで何かがすり減ったのか、それともサイトでプロキシする機会が閉じられたのでしょうか?
アップデート1。問題が見つかったと思います。原因ローカルホストからリモートサーバーにリクエストをそのままリダイレクトするので、フィールドHOSTのリクエストに「localhost」があります。一部のサイトはこのフィールドを無視しているようですが、他のサイトは404ページを使用してリダイレクトしようとしているため、要求している「localhost」が見つかりません。では、宛先サーバー名のリクエストでフィールド「ホスト」を変更する方法はどうでしょうか。