fork(1) download
  1. <?php
  2.  
  3. try {
  4.  
  5. // 接続開始
  6. $fp = fsockopen('www.yahoo.co.jp', 80, $errno, $errstr, 30);
  7.  
  8. // 失敗したら例外をスロー
  9. if (!is_resource($fp))
  10. throw new Exception($errstr, $errno);
  11.  
  12. // リクエストヘッダー作成
  13. $request = '';
  14. $request .= "GET / HTTP/1.0\r\n";
  15. $request .= "Host: www.yahoo.co.jp\r\n";
  16. $request .= "Connection: Close\r\n";
  17. $request .= "\r\n"; // 最後は改行を2回続ける
  18.  
  19. // リクエストヘッダー送信
  20. $result = fwrite($request);
  21.  
  22. // 失敗したら例外をスロー
  23. if ($result===false)
  24. throw new Exception('Failed to send request');
  25.  
  26. // レスポンスを最後まで取得
  27. $response = '';
  28. while (($temp=fgets($fp,4096))!==false)
  29. $response .= $temp;
  30.  
  31. // fgets関数がFalseを返したのにfeof関数がTrueを返さない場合はエラー
  32. if (!feof($response))
  33. throw new Exception('Faield to get response');
  34.  
  35. // レスポンスヘッダーとレスポンスボディを分割
  36. list($header, $body) = explode("\r\n\r\n", $response, 2);
  37.  
  38. // HTMLをエスケープして表示
  39. echo '【レスポンス】<br />'.PHP_EOL;
  40. echo 'ヘッダー:<br />'.PHP_EOL;
  41. echo nl2br(htmlspecialchars($header, ENT_QUOTES)).'<br />'.PHP_EOL;
  42. echo 'ボディ:<br />'.PHP_EOL;
  43. echo nl2br(htmlspecialchars($body, ENT_QUOTES)).'<br />'.PHP_EOL;
  44.  
  45. } catch (Exception $e) {
  46.  
  47. // 例外をキャッチしてエラー表示
  48. echo '【エラー発生】<br />'.PHP_EOL;
  49. echo 'コード: '.$e->getCode().'<br />'.PHP_EOL;
  50. echo 'メッセージ: '.$e->getMessage().'<br />'.PHP_EOL;
  51.  
  52. }
  53.  
  54. // 接続成功していれば最後に切断する
  55. if (is_resource($fp))
  56. fclose($fp);
  57.  
  58.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty