php使用socket post数据到其它web服务器的方法

5年以前  |  阅读数:1061 次  |  编程语言:PHP 

本文实例讲述了php使用socket post数据到其它web服务器的方法。分享给大家供大家参考。具体实现方法如下:


    function post_request($url, $data, $referer='') {
      // Convert the data array into URL Parameters like a=b&foo;=bar etc.
      $data = http_build_query($data);
      // parse the given URL
      $url = parse_url($url);
      if ($url['scheme'] != 'http') { 
        die('Error: Only HTTP request are supported !');
      }
      // extract host and path:
      $host = $url['host'];
      $path = $url['path'];
      // open a socket connection on port 80 - timeout: 30 sec
      $fp = fsockopen($host, 80, $errno, $errstr, 30);
      if ($fp){
        // send the request headers:
        fputs($fp, "POST $path HTTP/1.1\r\n");
        fputs($fp, "Host: $host\r\n");
        if ($referer != '')
          fputs($fp, "Referer: $referer\r\n");
        fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
        fputs($fp, "Content-length: ". strlen($data) ."\r\n");
        fputs($fp, "Connection: close\r\n\r\n");
        fputs($fp, $data);
        $result = ''; 
        while(!feof($fp)) {
          // receive the results of the request
          $result .= fgets($fp, 128);
        }
      }
      else { 
        return array(
          'status' => 'err', 
          'error' => "$errstr ($errno)"
        );
      }
      // close the socket connection:
      fclose($fp);
      // split the result header from the content
      $result = explode("\r\n\r\n", $result, 2);
      $header = isset($result[0]) ? $result[0] : '';
      $content = isset($result[1]) ? $result[1] : '';
      // return as structured array:
      return array(
        'status' => 'ok',
        'header' => $header,
        'content' => $content
      );
    }
    //使用方法
    // Submit those variables to the server
    $post_data = array(
      'test' => 'foobar',
      'okay' => 'yes',
      'number' => 2
    );
    // Send a request to example.com 
    $result = post_request('http://www.example.com/', $post_data);
    if ($result['status'] == 'ok'){
      // Print headers 
      echo $result['header']; 
      echo '<hr />';
      // print the result of the whole request:
      echo $result['content'];
    }
    else {
      echo 'A error occured: ' . $result['error']; 
    }

希望本文所述对大家的php程序设计有所帮助。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例