C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: HTTPレスポンスのボディの「?」


(過去ログ 62 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■35687 / inTopicNo.1)  HTTPレスポンスのボディの「?」
  
□投稿者/ のんたそ (1回)-(2009/05/12(Tue) 14:29:50)

分類:[VB.NET/VB2005 以降] 

お世話になります。
ソースコードは諸事情で載せれませんが、http://yunet.2.pro.tok2.com/contents/net_socket/ix002.htmlに近いコードです。
HTTPレスポンスについて質問なんですが、レスポンスヘッダは下記のように受信出来ています。

「HTTP/1.0 200 OK
Pragma: no-cache
Content-length: 11076
Content-type: image/jpeg」

レスポンスボディは、「????」と受信されてしまいます。

要は
「HTTP/1.0 200 OK
Pragma: no-cache
Content-length: 10874
Content-type: image/jpeg

????」
と受信してしまいます。
画像ファイルだけがこうなってしまい、テキストファイルであれば
レスポンスボディも正常に受信出来ています。

HTTPレスポンスを調べたり、文字列からバイト配列にするのに問題があるのかなと思っているのですが、
つまづいてしまったため、何かヒントをいただければなと思っています。
よろしくお願いします。
引用返信 編集キー/
■35688 / inTopicNo.2)  Re[1]: HTTPレスポンスのボディの「?」
□投稿者/ Hongliang (380回)-(2009/05/12(Tue) 14:59:22)
HTTP ヘッダは CRLFCRLF で終わる、と決められているのでそこまでは文字列に変換して構いませんが、そこから先は文字列にしちゃいけません。一旦文字列に変換されると、ほぼ間違いなく元のバイナリへの復元は不可能になります。
// といってもリンク先のコードだと元のバイナリ自体を Byte() として保存してるんで「復元」は不要ですが。
取得した Byte() の中から CRLFCRLF(&H0d &H0a &H0d &H0a)を検索し、そこまでをヘッダ、そこから先をボディとして扱ってください。
引用返信 編集キー/
■35690 / inTopicNo.3)  Re[1]: HTTPレスポンスのボディの「?」
□投稿者/ .SHO (819回)-(2009/05/12(Tue) 15:26:29)
No35687 (のんたそ さん) に返信

> 文字列からバイト配列にするのに

逆じゃないですか?
っていうか、文字列にしちゃダメ。
引用返信 編集キー/
■35691 / inTopicNo.4)  Re[1]: HTTPレスポンスのボディの「?」
□投稿者/ biac (93回)-(2009/05/12(Tue) 15:42:28)
biac さんの Web サイト
No35687 (のんたそ さん) に返信
> ????」
> と受信してしまいます。
> 画像ファイルだけがこうなってしまい、テキストファイルであれば
> レスポンスボディも正常に受信出来ています。

受信した、 のではないですよね? 受信したデータを文字として表示させたら "????" になったのでしょう。
画像データをそのまま文字として表示させようとして、 該当する文字コードが無かったので '?' と表示されてるのだと思います。

どういう結果を期待しているのですか?
また、 そう期待した理由は何故ですか?

引用返信 編集キー/
■35695 / inTopicNo.5)  Re[1]: HTTPレスポンスのボディの「?」
□投稿者/ ぱぱいやん (22回)-(2009/05/12(Tue) 16:15:42)
ぱぱいやん さんの Web サイト
No35687 (のんたそ さん) に返信
> お世話になります。
> ソースコードは諸事情で載せれませんが、http://yunet.2.pro.tok2.com/contents/net_socket/ix002.htmlに近いコードです。
> HTTPレスポンスについて質問なんですが、レスポンスヘッダは下記のように受信出来ています。
>
> 「HTTP/1.0 200 OK
> Pragma: no-cache
> Content-length: 11076
> Content-type: image/jpeg」
>
> レスポンスボディは、「????」と受信されてしまいます。

バイナリデータで送信したものだから「Content-type: image/jpeg」が生きる訳です。
テキストデータは文字列として受け取るから問題ないのです。
引用返信 編集キー/
■35701 / inTopicNo.6)  Re[1]: HTTPレスポンスのボディの「?」
□投稿者/ επιστημη (1917回)-(2009/05/12(Tue) 16:58:49)
επιστημη さんの Web サイト
> HTTP/1.0 200 OK
> Pragma: no-cache
> Content-length: 11076 ← 改行以降に続く11076バイトは
> Content-type: image/jpeg ← イメージデータであり、jpeg形式である

っちゅーことなんで、
ボディは 11076個の(文字ではなく)バイト列です。
そのまんまコンソールに出力させたらぐっちゃんぐっちゃんですわね。
# だってそれ、画像データなんだもん。


引用返信 編集キー/
■35704 / inTopicNo.7)  Re[2]: HTTPレスポンスのボディの「?」
□投稿者/ のんたそ (2回)-(2009/05/12(Tue) 17:20:51)
みなさま、お返事有り難うございます。
こんにちは。


>HTTP ヘッダは CRLFCRLF で終わる、と決められているのでそこまでは文字列に変換して構いませんが、そこから先は文字列にしちゃいけません。
こうやっていました。
Dim b_t As Byte() = System.Text.Encoding.ASCII.GetBytes("GET hogehogedata HTTP/1.0" _
 + vbCrLf + vbCrLf)
>そう期待した理由は何故ですか?
期待した理由というかただ漠然と、テキストデータみたいに画像も・・・って考えでいました。
バイナリなので、それはむりだぁ。だから「????」と出るのかと気づきました。

>「Content-type: image/jpeg」が生きる訳です。
ですよねぇ。。。テキストだと「Content-Type: text/html」と出たので、この時点でデータが区別されてるって気づきましたΣ

>そのまんまコンソールに出力させたらぐっちゃんぐっちゃんですわね。
># だってそれ、画像データなんだもん。
コマンドプロンプトで、データ出力させてみました。
「C:\hoge>telnet host port」で調べたい画像データを調べたらズラズラーっと出てきました長いのがっ

返信本当に有り難うございます。バイナリについてとバイナリダンプについて調べてみます。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -