<?php
try {
// 接続開始
$fp = fsockopen('www.yahoo.co.jp', 80, $errno, $errstr, 30);
// 失敗したら例外をスロー
throw new Exception($errstr, $errno);
// リクエストヘッダー作成
$request = '';
$request .= "GET / HTTP/1.0\r\n";
$request .= "Host: www.yahoo.co.jp\r\n";
$request .= "Connection: Close\r\n";
$request .= "\r\n"; // 最後は改行を2回続ける
// リクエストヘッダー送信
// 失敗したら例外をスロー
if ($result===false)
throw new Exception('Failed to send request');
// レスポンスを最後まで取得
$response = '';
while (($temp=fgets($fp,4096))!==false) $response .= $temp;
// fgets関数がFalseを返したのにfeof関数がTrueを返さない場合はエラー
throw new Exception('Faield to get response');
// レスポンスヘッダーとレスポンスボディを分割
list($header, $body) = explode("\r\n\r\n", $response, 2);
// HTMLをエスケープして表示
echo '【レスポンス】<br />'.PHP_EOL;
echo 'ヘッダー:<br />'.PHP_EOL;
echo 'ボディ:<br />'.PHP_EOL;
} catch (Exception $e) {
// 例外をキャッチしてエラー表示
echo '【エラー発生】<br />'.PHP_EOL;
echo 'コード: '.$e->getCode().'<br />'.PHP_EOL;
echo 'メッセージ: '.$e->getMessage().'<br />'.PHP_EOL;
}
// 接続成功していれば最後に切断する
PD9waHAKCnRyeSB7CiAgICAKICAgIC8vIOaOpee2mumWi+WniwogICAgJGZwID0gZnNvY2tvcGVuKCd3d3cueWFob28uY28uanAnLCA4MCwgJGVycm5vLCAkZXJyc3RyLCAzMCk7CiAgICAKICAgIC8vIOWkseaVl+OBl+OBn+OCieS+i+WkluOCkuOCueODreODvAogICAgaWYgKCFpc19yZXNvdXJjZSgkZnApKQogICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJGVycnN0ciwgJGVycm5vKTsKICAgICAgICAKICAgIC8vIOODquOCr+OCqOOCueODiOODmOODg+ODgOODvOS9nOaIkAogICAgJHJlcXVlc3QgPSAnJzsKICAgICRyZXF1ZXN0IC49ICJHRVQgLyBIVFRQLzEuMFxyXG4iOwogICAgJHJlcXVlc3QgLj0gIkhvc3Q6IHd3dy55YWhvby5jby5qcFxyXG4iOwogICAgJHJlcXVlc3QgLj0gIkNvbm5lY3Rpb246IENsb3NlXHJcbiI7CiAgICAkcmVxdWVzdCAuPSAiXHJcbiI7IC8vIOacgOW+jOOBr+aUueihjOOCkjLlm57ntprjgZHjgosKICAgIAogICAgLy8g44Oq44Kv44Ko44K544OI44OY44OD44OA44O86YCB5L+hCiAgICAkcmVzdWx0ID0gZndyaXRlKCRyZXF1ZXN0KTsKICAgIAogICAgLy8g5aSx5pWX44GX44Gf44KJ5L6L5aSW44KS44K544Ot44O8CiAgICBpZiAoJHJlc3VsdD09PWZhbHNlKQogICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ZhaWxlZCB0byBzZW5kIHJlcXVlc3QnKTsKICAgIAogICAgLy8g44Os44K544Od44Oz44K544KS5pyA5b6M44G+44Gn5Y+W5b6XCiAgICAkcmVzcG9uc2UgPSAnJzsKICAgIHdoaWxlICgoJHRlbXA9ZmdldHMoJGZwLDQwOTYpKSE9PWZhbHNlKQogICAgICAgICRyZXNwb25zZSAuPSAkdGVtcDsKICAgICAgICAKICAgIC8vIGZnZXRz6Zai5pWw44GMRmFsc2XjgpLov5TjgZfjgZ/jga7jgatmZW9m6Zai5pWw44GMVHJ1ZeOCkui/lOOBleOBquOBhOWgtOWQiOOBr+OCqOODqeODvAogICAgaWYgKCFmZW9mKCRyZXNwb25zZSkpCiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignRmFpZWxkIHRvIGdldCByZXNwb25zZScpOwogICAgICAgIAogICAgLy8g44Os44K544Od44Oz44K544OY44OD44OA44O844Go44Os44K544Od44Oz44K544Oc44OH44Kj44KS5YiG5YmyCiAgICBsaXN0KCRoZWFkZXIsICRib2R5KSA9IGV4cGxvZGUoIlxyXG5cclxuIiwgJHJlc3BvbnNlLCAyKTsKICAgIAogICAgLy8gSFRNTOOCkuOCqOOCueOCseODvOODl+OBl+OBpuihqOekugogICAgZWNobyAn44CQ44Os44K544Od44Oz44K544CRPGJyIC8+Jy5QSFBfRU9MOwogICAgZWNobyAn44OY44OD44OA44O8OjxiciAvPicuUEhQX0VPTDsKICAgIGVjaG8gbmwyYnIoaHRtbHNwZWNpYWxjaGFycygkaGVhZGVyLCBFTlRfUVVPVEVTKSkuJzxiciAvPicuUEhQX0VPTDsKICAgIGVjaG8gJ+ODnOODh+OCozo8YnIgLz4nLlBIUF9FT0w7CiAgICBlY2hvIG5sMmJyKGh0bWxzcGVjaWFsY2hhcnMoJGJvZHksIEVOVF9RVU9URVMpKS4nPGJyIC8+Jy5QSFBfRU9MOwogICAgCn0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewogICAgCiAgICAvLyDkvovlpJbjgpLjgq3jg6Pjg4Pjg4HjgZfjgabjgqjjg6njg7zooajnpLoKICAgIGVjaG8gJ+OAkOOCqOODqeODvOeZuueUn+OAkTxiciAvPicuUEhQX0VPTDsKICAgIGVjaG8gJ+OCs+ODvOODiTogJy4kZS0+Z2V0Q29kZSgpLic8YnIgLz4nLlBIUF9FT0w7CiAgICBlY2hvICfjg6Hjg4Pjgrvjg7zjgrg6ICcuJGUtPmdldE1lc3NhZ2UoKS4nPGJyIC8+Jy5QSFBfRU9MOwogICAgCn0KCi8vIOaOpee2muaIkOWKn+OBl+OBpuOBhOOCjOOBsOacgOW+jOOBq+WIh+aWreOBmeOCiwppZiAoaXNfcmVzb3VyY2UoJGZwKSkKICAgIGZjbG9zZSgkZnApOwoK