Home  >  Article  >  Backend Development  >  Briefly describe the method of implementing httpRequest in php

Briefly describe the method of implementing httpRequest in php

墨辰丷
墨辰丷Original
2018-06-12 16:12:285403browse

This article mainly introduces the method of php implementing httpRequest, involving the skills of php operating http, and has certain reference value. Friends in need can refer to it

The example of this article describes the method of php implementing httpRequest. The details are as follows:

I want to grab the data from the school library website and process it before returning it to the browser. I have tried many methods. First I tried http_request(), but this college supports pecl_http. Then I tried class HttpRequest which is widely circulated on the Internet. Maybe I don’t know how to use it, and it failed. Later I saw the function httpRequest($url, $post='', $method='GET', $limit=0, $returnHeader=FALSE, $cookie='', $bysocket=FALSE, $ip='', $ timeout=15, $block=TRUE), I used it successfully, so I posted it to share. The function code is as follows:

The code is as follows:

<?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=&#39;&#39;,$method=&#39;GET&#39;,$limit=0,$returnHeader=FALSE,$cookie=&#39;&#39;,$bysocket=FALSE,$ip=&#39;&#39;,$timeout=15,$block=TRUE) {  
       $return = &#39;&#39;;  
       $matches = parse_url($url);  
       !isset($matches[&#39;host&#39;]) && $matches[&#39;host&#39;] = &#39;&#39;;  
       !isset($matches[&#39;path&#39;]) && $matches[&#39;path&#39;] = &#39;&#39;;  
       !isset($matches[&#39;query&#39;]) && $matches[&#39;query&#39;] = &#39;&#39;;  
       !isset($matches[&#39;port&#39;]) && $matches[&#39;port&#39;] = &#39;&#39;;  
       $host = $matches[&#39;host&#39;];  
       $path = $matches[&#39;path&#39;] ? $matches[&#39;path&#39;].($matches[&#39;query&#39;] ? &#39;?&#39;.$matches[&#39;query&#39;] : &#39;&#39;) : &#39;/&#39;;  
       $port = !empty($matches[&#39;port&#39;]) ? $matches[&#39;port&#39;] : 80;  
       if(strtolower($method) == &#39;post&#39;) {  
           $post = (is_array($post) and !empty($post)) ? http_build_query($post) : $post;  
           $out = "POST $path HTTP/1.0\r\n";  
           $out .= "Accept: */*\r\n";  
           //$out .= "Referer: $boardurl\r\n";  
           $out .= "Accept-Language: zh-cn\r\n";  
           $out .= "Content-Type: application/x-www-form-urlencoded\r\n";  
           $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";  
           $out .= "Host: $host\r\n";  
           $out .= &#39;Content-Length: &#39;.strlen($post)."\r\n";  
           $out .= "Connection: Close\r\n";  
           $out .= "Cache-Control: no-cache\r\n";  
           $out .= "Cookie: $cookie\r\n\r\n";  
           $out .= $post;  
       } else {  
           $out = "GET $path HTTP/1.0\r\n";  
           $out .= "Accept: */*\r\n";  
           //$out .= "Referer: $boardurl\r\n";  
           $out .= "Accept-Language: zh-cn\r\n";  
           $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";  
           $out .= "Host: $host\r\n";  
           $out .= "Connection: Close\r\n";  
           $out .= "Cookie: $cookie\r\n\r\n";  
       }  
       $fp = fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);  
       if(!$fp) return &#39;&#39;; else {  
           $header = $content = &#39;&#39;;  
           stream_set_blocking($fp, $block);  
           stream_set_timeout($fp, $timeout);  
           fwrite($fp, $out);  
           $status = stream_get_meta_data($fp);  
           if(!$status[&#39;timed_out&#39;]) {//未超时  
               while (!feof($fp)) {  
                   $header .= $h = fgets($fp);  
                   if($h && ($h == "\r\n" ||  $h == "\n")) 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;  
       }  
    }  
?>

The call is also very simple. Simple example:

The code is as follows:

echo httpRequest(&#39;http://www.baidu.com&#39;);

Summary: The above is the entire content of this article, I hope it will be helpful to everyone's learning.

Related recommendations:

How to automatically generate forms with PHP

How to operate MySQL database with PHP

php method for server-side predefined variable $_SERVER

The above is the detailed content of Briefly describe the method of implementing httpRequest in php. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn