POSTデータを送ったときのレスポンスを読む
PHPでPOSTデータを送る方法はいくつかあるらしい。
が、制限が厳しい環境だと、どうしてもfsockopenでがんばるしかない。
で、末尾に「実験用」と書いてあるので、まぁこれ自体はいいのだが、これと同レベルのものが本番(何)で動いていたりとかマジありえないんですけどー‥とか言っても始まらないので、せめてこのくらい実装しようよという点の一つとして、レスポンスが「Transfer-Encoding: chunked」の場合の処理を書いてみた。
上記2番目のサイトにあるコードの中で直すとしたら以下の箇所。
<?php /* 応答データ受信 */ $response = ""; while (!feof($fp)) { $response .= fgets($fp, 4096); }
これを、以下のようにする。
<?php $response = ""; // ヘッダの読み込み while ( !feof( $fp ) ) { $tmp = fgets($fp, 4096); $response .= $tmp; if ($tmp == "\r\n") { break; } } $isChunked = (preg_match("/\r\nTransfer-Encoding: chunked\r\n/", $response) === 1); // ボディの読み込み while ( !feof( $fp ) ) { $tmp = ''; if ($isChunked) { $strSize = fgets($fp, 4096); $strSize = trim($strSize); $len = intval($strSize, 16); if ($len > 0) { $tmp = ''; while (strlen($tmp) < $len) { $tmp .= fread($fp, $len - strlen($tmp)); } // 指定された長さ分読み込んだ後に改行コードがあるので、読んで破棄する。 $ss = fgets($fp); } } else { $tmp = fgets($fp, 4096); } $response .= $tmp; }
まぁ、ヘッダの判定はだいぶいい加減だが(ぉ