1

Webプロキシのように機能するサーブレットを作成しました。ただし、Javascript GET呼び出しの中には、ページを読み込んでいるときに元のコンテンツの一部しか返さないものがありますlocalhost:8080/Proxy?requestURL=example.com

javaスクリプトのコンテンツをコンソールにプリッティングすると、それらは完了します。ただし、ブラウザでの応答は切り捨てられます。

私はこのように書いています:

ServletOutputStream sos = resp.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(sos);
..
String str = content_of_get_request
..
writer.write(str);
writer.flush();
writer.close();

奇妙なことに、次のようにページリクエスト中に読み込まれたJavascriptを直接リクエストすると、次のようになります。

localhost:8080/Proxy?requestURL=anotherexaple.com/needed.js

コンテンツ全体がブラウザに返されます。

誰かがアイデアを持っていたら素晴らしいと思います。よろしく

アップデート:

問題は、応答文字列を作成する方法でした。

while ((line = rd.readLine()) != null)
{
    response.append(line);
}

Streamから1行を読み取り、StringBufferに追加しましたが、firefoxとchromeに問題があったようです。一部のブラウザはJavaScriptの最大行長を実装しているようですが、RFCHTTP1.1標準に記載されている最大行長はありません。

修理:

行に「\n」を追加するだけで問題が解決します。

response.append(line+"\n");
4

1 に答える 1

0

あなたがしているのはHtmlResponseを読んでいるだけですが、実際には画像やjsなどのHTMLで参照されている他のリソースを呼び出していないからです。

Firefox用のFirebugを介して、ブラウザがhtmlをどのようにレンダリングするかを監視すると、それを確認できます。

1)ブラウザがHTML応答を受信します。

2)次に、参照されているリソースを解析し、それらごとに個別のGet呼び出しを行います。

したがって、プロキシが機能するためには、このブラウザの動作を模倣する必要があります。

私のアドバイスは、すでに利用可能なオープンソースライブラリの HTMLユニットを使用することです

于 2013-03-08T09:29:50.400 に答える