0

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」が見つかりません。では、宛先サーバー名のリクエストでフィールド「ホスト」を変更する方法はどうでしょうか。

4

2 に答える 2

0

ターゲットサーバーは、NIOコードについて、またはプロキシであるか実際のクライアントであるかについては何も知りません。

エラーページが表示された場合、プロキシは機能しており、プロキシされているリソースが問題になっています。問題は、存在しない、アクセスできないなどです。コードでそれについてできることは何もありません。あなたが心配すべき理由。他のものを送信するのと同じように、エラーページをクライアントに送信するだけです。

接続せずに何か他のことをするのに、なぜそのメソッドはconnect()と呼ばれるのですか?

于 2012-08-07T22:40:29.367 に答える
0

問題が見つかりました。プロキシに「localhost」が含まれている後にHOSTを提出したため、一部のサイトはそれを受け入れ、他のサイトは受け入れません。このフィールドの値を実際のホストに置き換えると、問題が修正されます。

于 2012-08-20T08:59:35.230 に答える