【转载】php发送get、post请求的几种方法

Posted on Posted in 计算机1,217 views

方法1: 用file_get_contents 以get方式获取内容

<?php
    $url='http://www.domain.com/';
    $html = file_get_contents($url);
    echo $html;
?>

方法2: 用fopen打开url, 以get方式获取内容

<?php  
    $fp = fopen($url, 'r');  
    //返回请求流信息(数组:请求状态,阻塞,返回值是否为空,返回值http头等)  
    stream_get_meta_data($fp);  
    while(!feof($fp)) { 
       $result .= fgets($fp, 1024);
    }  
    echo "url body: $result";
    fclose($fp);
?>

方法3:用file_get_contents函数,以post方式获取url

<?php    
    $data = array ('foo' => 'bar');
    //生成url-encode后的请求字符串,将数组转换为字符串    
    $data = http_build_query($data);    
    $opts = array (        
             'http' => array (        
                'method' => 'POST',        
                'header'=> "Content-type: application/x-www-form-urlencoded\r\n" ."Content-Length: " . strlen($data) . "\r\n",        
                'content' => $data)
           );

    //生成请求的句柄文件    
    $context = stream_context_create($opts);    
    $html = file_get_contents('http://localhost/e/admin/test.html', false, $context);    
    echo $html;
?>

 

方法4:用fsockopen函数打开url,以get方式获取完整的数据,包括header和body,fsockopen需要 PHP.ini 中 allow_url_fopen 选项开启

<?php
    function get_url ($url,$cookie=false)
    {    
        $url = parse_url($url);    
        $query = $url[path]."?".$url[query];    
        echo "Query:".$query;    
        $fp = fsockopen( $url[host], $url[port]?$url[port]:80 , $errno,    $errstr, 30);    
        if (!$fp) {        
            return false;
        } else {        
            $request = "GET $query HTTP/1.1\r\n";        
            $request .= "Host: $url[host]\r\n";        
            $request .= "Connection: Close\r\n";        
            if($cookie) $request.="Cookie:   $cookie\n";        
            $request.="\r\n";
            fwrite($fp,$request);        
            while()) {          
                $result .= @fgets($fp, 1024);
            }
            fclose($fp);        
            return $result;
        }
    }
    //获取url的html部分,去掉header
    function GetUrlHTML($url,$cookie=false)
    {    
        $rowdata = get_url($url,$cookie);    
        if($rowdata){        
            $body= stristr($rowdata,"\r\n\r\n");        
            $body=substr($body,4,strlen($body));        
            return $body;
        }    
        return false;
    }

?>

 

方法5:用fsockopen函数打开url,以POST方式获取完整的数据,包括header和body

<?php
    function HTTP_Post($URL,$data,$cookie, $referrer="")
    {
        // parsing the given URL    
        $URL_Info=parse_url($URL);
        
        // Building referrer    
        if($referrer=="") // if not given use this script as referrer       
             $referrer="111";
             
        // making string from $data    
        foreach($data as $key=>$value)        
            $values[]="$key=".urlencode($value);    
        $data_string=implode("&",$values);
    
        // Find out which port is needed - if not given use standard (=80)           if(!isset($URL_Info["port"]))        
            $URL_Info["port"]=80;
            
        // building POST-request:    
        $request.="POST ".$URL_Info["path"]." HTTP/1.1\n";    
        $request.="Host: ".$URL_Info["host"]."\n";    
        $request.="Referer: $referer\n";    
        $request.="Content-type: application/x-www-form-urlencoded\n";    
        $request.="Content-length: ".strlen($data_string)."\n";    
        $request.="Connection: close\n";    
        $request.="Cookie:   $cookie\n";    
        $request.="\n";    
        $request.=$data_string."\n";    
        
        $fp = fsockopen($URL_Info["host"],$URL_Info["port"]);    
        fputs($fp, $request);    
        while(!feof($fp)) {        
            $result .= fgets($fp, 1024);
        }
        fclose($fp);
        return $result;
   }

?>

 

方法6:使用curl库,使用curl库之前,可能需要查看一下php.ini是否已经打开了curl扩展

<?php      
    $ch = curl_init();      
    $timeout = 5;
    curl_setopt ($ch, CURLOPT_URL, 'http://www.domain.com/');
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);      
    $file_contents = curl_exec($ch);
    curl_close($ch);      
    echo $file_contents;
?>

转载标明出处:https://blog.evanxia.com/2016/01/10