- PR -

HttpClientを利用した別サーバへのリクエスト処理時の画像処理について

投稿者投稿内容
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-07-20 17:25
引用:

おばけさんの書き込み (2004-07-20 17:05) より:
Transfer-Encodingのほかには、Content-Typeも大事ですしContent-Lengthも要りますね。
これくらい入れておけば、とりあえずは大丈夫かな?


チャンク形式の場合、Content-Lengthは入れても無視されると思います。通常のレスポンス
でもサーブレットコンテナが勝手につけることが多いので、わざわざ設定する必要もないと
思いますが。

とはいっても、特に問題がない限りレスポンスヘッダはすべて中継したほうがいいと思います。
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2004-07-20 17:36
引用:

チャンク形式の場合、Content-Lengthは入れても無視されると思います。


ああ、確かにチャンクだとそうですね。

引用:

通常のレスポンスでもサーブレットコンテナが勝手につけることが多いので、わざわざ設定する必要もないと思いますが。


そうなんですか?
以前WebLogic 7.1では付けてくれなかった気が・・・。
とは言っても、もはや1年以上前の出来事なので、うろ覚えですが
rviper
常連さん
会議室デビュー日: 2004/06/15
投稿数: 34
投稿日時: 2004-07-20 17:46
とりあえずヘッダを全部中継するように、変更してみたのですが、やっぱり画像は表示されません・・・
パケットキャプチャーして内容を見てみると、画像の開始データがすでに違っているのですが、それでもいいんでしょうか?
実際に画像を表示するHTMLを直接たたいた場合とキャプチャーしている内容が
違うのでこのままでは表示されないような・・・(;´Д`)
rviper
常連さん
会議室デビュー日: 2004/06/15
投稿数: 34
投稿日時: 2004-07-20 17:49
処理は以下のように行っています。

gm = new GetMethod( url );
//ページ取得開始
ret = client.executeMethod(gm);
head = gm.getResponseHeaders();
for(int i = 0; i < head.length; i++)
{
res.setHeader(head[i].getName(), head[i].getValue());
}
InputStream in = gm.getResponseBodyAsStream();
BufferedReader bf = new BufferedReader( new InputStreamReader(in) );
//データ出力
while(bf.ready())
{
w = bf.readLine();
if( w == null || (w != null && w.equals("")) ) break;
os.print(w);
}
//コネクションを開放
gm.releaseConnection();
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-07-20 17:49
引用:

おばけさんの書き込み (2004-07-20 17:36) より:
以前WebLogic 7.1では付けてくれなかった気が・・・。
とは言っても、もはや1年以上前の出来事なので、うろ覚えですが


http://edocs.beasys.co.jp/e-docs/wls/docs81/servlet/progtasks.html#159442
7.0のドキュメントにも同じことが書いてあるので、もしかして出力ストリームのフラッシュ
とかしていませんか?
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-07-20 17:52
引用:

rviperさんの書き込み (2004-07-20 17:49) より:
BufferedReader bf = new BufferedReader( new InputStreamReader(in) );
//データ出力
while(bf.ready())
{
w = bf.readLine();
if( w == null || (w != null && w.equals("")) ) break;
os.print(w);
}



Reader系のクラスを使うと、バイナリデータを文字データとして読んでしまいますよ。
ストリームデータをそのまま出力してください。
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2004-07-20 18:15
おお〜〜〜すごい!こんなことが理由だったんですね
知らずにフラッシュしてましたね。
というか、フラッシュした方が良いと、自分としては思ってました。
でも、WLSは明示的にフラッシュするとヘッダを付けてくれないんですねえ。。。

ありがとうございます。
こんな挙動があるなんて、非常に勉強になります
rviper
常連さん
会議室デビュー日: 2004/06/15
投稿数: 34
投稿日時: 2004-07-20 18:23
返信ありがとうございます。

すいません。思いっきり勘違いをしていました。
単純にInputStreamからbyte配列で取得して、そのままwriteして
あげればよかっただけですね(;´Д`)
何年、この業界で仕事してるんだろ俺・・・

とりあえず無事に表示出来ました。みなさん有難う御座います。

スキルアップ/キャリアアップ(JOB@IT)