0

問題: HTTP メッセージからクライアント (Web ブラウザー) に応答を書き込んでも、文字列を使用するときにページに画像がある場合、ページ全体が返されないため、バイトを使用することにしましたが、まだ同じ問題があります。リクエストからヘッダーを文字列として取得し、それをクライアントにフラッシュしましたが、メッセージがWebブラウザーに正しく表示されるようにするためにメッセージをどうすればよいかわかりません。

        //This portion takes the message from the Httpurl connection inputstream
        //the header has already been exttracted
        //uc here represents a httpurlconnection
       byte[] data = new byte[uc.getContentLength()];
        int bytesRead = 0;
        int offset = 0;
        InputStream in = new BufferedInputStream(uc.getInputStream());
        while (offset < uc.getContentLength()) {
        bytesRead =in.read(data, offset, data.length-offset);
        if (bytesRead == -1) break;
        offset += bytesRead;
4

2 に答える 2

0

HTMLページを画像でプロキシしているようで、HTMLページの画像がHTMLソースコードに何らかの形で自動的にインライン化されることを期待しているようです。したがって、これは絶対に真実ではありません。HTMLの画像は、Webブラウザが個別に呼び出してダウンロードする必要があるURLを指す属性<img>を持つ要素によって表されます。srcCSSやJSファイルなどの他のリソースにもまったく同じことが当てはまります。

基本的に、取得したHTMLを解析し、すべての要素<img src>(および必要に応じ<link href><script src>)要素をスキャンし、それらのURLをプロキシのURLに変更して、目的の画像(およびCSS / JS)リソースを個別に提供できるようにする必要があります。

関連する質問のこの回答でキックオフの例を見つけることができます:HttpURLConnectionに画像を含むWebページをロードさせる

于 2013-02-15T00:04:18.157 に答える
0

バイトを読み取るときに応答にバイトを書き込み、小さなバッファーを使用することをお勧めします。これにより、サーバーが大量のメモリ使用量の影響を受けなくなります。サーバーのメモリ内の配列にすべてのバイトをロードすることはお勧めできません。

簡単なサンプルを次に示します。

response.setContentType("text/html;charset=UTF-8");
    OutputStream out = response.getOutputStream();
    HttpURLConnection uc;

// Setup the HTTP connection...

InputStream in = uc.getInputStream();
byte[] b = new byte[1024];
int bytesRead = 0;
while ( bytesRead != -1 ) {
    bytesRead = in.read(b);
    out.write(b);;
}

// Close the streams...
于 2013-02-14T23:32:53.577 に答える