ホームページ >バックエンド開発 >PHPチュートリアル >PHP はソケットを通じて他の Web サーバーにデータを送信します

PHP はソケットを通じて他の Web サーバーにデータを送信します

WBOY
WBOYオリジナル
2016-07-25 08:43:101332ブラウズ
  1. function post_request($url, $data, $referer='') {
  2. // データ配列を a=b&foo=bar などの URL パラメータに変換します
  3. $data = http_build_query($data);
  4. // 指定された URL を解析します
  5. $url = parse_url($url);
  6. if ($url['scheme'] != 'http') {
  7. die('エラー: HTTP リクエストのみがサポートされています !');
  8. }
  9. // ホストとパスを抽出します:
  10. $host = $url['host'];
  11. $path = $url['path'];
  12. // ポート 80 でソケット接続を開きます - タイムアウト: 30 sec
  13. $fp = fsockopen($host, 80, $errno, $errstr, 30);
  14. if ($fp){
  15. // リクエストヘッダーを送信します:
  16. fputs($fp, "POST $path HTTP/ 1.1rn");
  17. fputs($fp, "ホスト: $hostrn");
  18. if ($referer != '')
  19. fputs($fp, "リファラー: $refererrn");
  20. fputs($fp , "Content-type: application/x-www-form-urlencodedrn");
  21. fputs($fp, "Content-length: ".strlen($data) ."rn");
  22. fputs($fp, "Connection : closenrn");
  23. fputs($fp, $data);
  24. $result = '';
  25. while(!feof($fp)) {
  26. // リクエストの結果を受け取る
  27. $result .= fgets( $fp, 128);
  28. }
  29. }
  30. else {
  31. return array(
  32. 'status' => 'エラー',
  33. 'エラー' => "$errstr ($errno)"
  34. );
  35. }
  36. // ソケット接続を閉じる:
  37. fclose($fp);
  38. // 結果ヘッダーをコンテンツから分割する
  39. $result =explode("rnrn", $result, 2);
  40. $header = isset($result[0]) ? $result[0] : '';
  41. $content = isset($result[1]) ? $result[1] : '';
  42. // 構造化配列として返す:
  43. return array(
  44. 'status' => 'ok',
  45. 'header' => $header,
  46. 'content' => $content
  47. );
  48. }
  49. //使用方法
  50. // これらの変数をサーバーに送信します
  51. $post_data = array(
  52. 'test' => 'foobar',
  53. 'okay' => 'yes' ,
  54. 'number' => 2
  55. );
  56. // example.com にリクエストを送信します
  57. $result = post_request('http://www.example.com/', $post_data);
  58. if ( $result['status'] == 'ok'){
  59. // ヘッダーを出力します
  60. echo $result['header'];
  61. echo '
    ';
  62. // の結果を出力しますリクエスト全体:
  63. echo $result['content'];
  64. }
  65. else {
  66. echo 'エラーが発生しました: ' 。 $result['error'];
  67. }
复制代

ソケット、php、ポスト


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。