PHP之httpRequest

<?php 

  /**

  * Respose A Http Request

  *

  * @param string $url

  * @param array $post

  * @param string $method

  * @param bool $returnHeader

  * @param string $cookie

  * @param bool $bysocket

  * @param string $ip

  * @param integer $timeout

  * @param bool $block

  * @return string Response

  */ 

  function httpRequest($url,$post='',$method='GET',$limit=0,$returnHeader=FALSE,$cookie='',$bysocket=FALSE,$ip='',$timeout=15,$block=TRUE) { 

    $return = ''; 

    $matches = parse_url($url); 

    !isset($matches['host']) && $matches['host'] = ''; 

    !isset($matches['path']) && $matches['path'] = ''; 

    !isset($matches['query']) && $matches['query'] = ''; 

    !isset($matches['port']) && $matches['port'] = ''; 

    $host = $matches['host']; 

    $path = $matches['path'] ? $matches['path'].($matches['query'] ? '?'.$matches['query'] : '') : '/'; 

    $port = !empty($matches['port']) ? $matches['port'] : 80; 

    if(strtolower($method) == 'post') { 

      $post = (is_array($post) and !empty($post)) ? http_build_query($post) : $post; 

      $out = "POST $path HTTP/1.0 "; 

      $out .= "Accept: */* "; 

      //$out .= "Referer: $boardurl "; 

      $out .= "Accept-Language: zh-cn "; 

      $out .= "Content-Type: application/x-www-form-urlencoded "; 

      $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT] "; 

      $out .= "Host: $host "; 

      $out .= 'Content-Length: '.strlen($post)." "; 

      $out .= "Connection: Close "; 

      $out .= "Cache-Control: no-cache "; 

      $out .= "Cookie: $cookie "; 

      $out .= $post; 

    } else { 

      $out = "GET $path HTTP/1.0 "; 

      $out .= "Accept: */* "; 

      //$out .= "Referer: $boardurl "; 

      $out .= "Accept-Language: zh-cn "; 

      $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT] "; 

      $out .= "Host: $host "; 

      $out .= "Connection: Close "; 

      $out .= "Cookie: $cookie "; 

    } 

    $fp = fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout); 

    if(!$fp){ 

      return ''; 

    }else { 

      $header = $content = ''; 

      stream_set_blocking($fp, $block); 

      stream_set_timeout($fp, $timeout); 

      fwrite($fp, $out); 

      $status = stream_get_meta_data($fp); 

      if(!$status['timed_out']) {//未超时 

        while (!feof($fp)) { 

          $header .= $h = fgets($fp); 

          if($h && ($h == " " ||  $h == " ")){ 

            break; 

          }

        } 

        $stop = false; 

        while(!feof($fp) && !$stop) { 

          $data = fread($fp, ($limit == 0 || $limit > 8192 ? 8192 : $limit)); 

          $content .= $data; 

          if($limit) { 

            $limit -= strlen($data); 

            $stop = $limit <= 0; 

          } 

        } 

      } 

      fclose($fp); 

      return $returnHeader ? array($header,$content) : $content; 

    } 

  } 

?>

原文地址:https://www.cnblogs.com/alonesky/p/10042639.html