WEB技術日記

チャンク形式のHTTP1.1応答 

HTTP1.0応答の場合は、問題ないのですが、HTTP1.1応答の場合、ボディ部がチャンク形式というちょっと変わった形式で返ってくるようです。

例えば、ボディ部が
abcdefghijklmnopqrstuvwxyz1234567890
の場合、HTTP1.0だとこれがそのまま返ってきますが、
HTTP1.1だと
1a+改行コード(1aは十進数に直すと26バイト、次のデータの長さ)
abcdefghijklmnopqrstuvwxyz+改行コード
10+改行コード
1234567890+改行コード
0+改行コード(データの終わり)
オプションデータ+改行コード
オプションデータ+改行コード
・・・・
という感じで返ってくるようです。

これを解析する場合のスクリプトは以下のような感じ。

<?
$fp = fsockopen(“アドレス”, 80, $errno, $errstr, 30);
if (!$fp) {
echo “$errstr ($errno)<br />\n”;
} else {
$out = “GET HTTP/1.1\r\n”;
$out .= “Accept: */*\r\n”;
$out .= “Accept-Language: ja\r\n”;
$out .= “User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n”;
$out .= “Host: ホスト名\r\n”;
$out .= “Connection: Keep-Alive\r\n\r\n”;
fwrite($fp, $out);
while (!feof($fp)) {
$headers=fgets($fp, 4096);
if(trim($headers)==”"){
break;
}
}
$body=”";
while (!feof($fp)) {
$tmp = hexdec(fgets($fp));
if (!$tmp) break;
$body=fread($fp, $tmp);
fgets($fp);
print $body;
}
fclose($fp);
}
?>

 

 

WEB技術日記

 
 
page top