好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

PHP:6种GET和POST请求发送方法

在i94web博客中,我试过了畅言和多说两种社会化评论框,后来还是抛弃了畅言,不安全。

无论是畅言还是多说,我都需要从远程抓取文章的评论数,然后存入本地数据库。对于多说,请求的格式如下:

// 获取评论次数,参数是文章ID function getCommCount($postid) { $jsondata = file_get_contents( "http://api.duoshuo.com/threads/counts.json?short_name=i94web&threads=$postid" ); // 设置true返回数组,不设置或者是false则返回对象 $resjson= json_decode($jsondata, true ); return $resjson[ 'response' ][$postid][ 'comments' ]; }

 

对于远程请求,有很多种方法。今天,LZ就搜罗了六种,供大家参考。

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

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

 

   2、用fopen打开url,用get方式获取

$fp = fopen($url, 'r' ); stream_get_meta_data($fp); while (!feof($fp)) { $result .= fgets($fp, 1024); } echo "url body: $result" ; fclose($fp);

 

 

3、用file_get_contents 以post方式获取内容:

$data = array ( 'foo' => 'bar' ); $data = http_build_query($data); $opts = array ( 'http' => array ( 'method' => 'POST' , 'header' => "Content-type: application/x-www-form-urlencodedrn" . 'Content-Length: ' . strlen($data) . 'rn' , '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 选项开启

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.1rn' ; $request .= 'Host: $url[host]rn' ; $request .= 'Connection: Closern' ; if ($cookie) $request.= 'Cookie: $cookien' ; $request.= 'rn' ; fwrite($fp,$request); while (!@feof($fp)) { $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, 'rnrn' ); $body=substr($body,4,strlen($body)); return $body; } return false ; }

 

 

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

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.1n" ; $request.= "Host: " .$URL_Info[ 'host' ]. "n" ; $request.= "Referer: $referern" ; $request.= "Content-type: application/x-www-form-urlencodedn" ; $request.= 'Content-length: ' .strlen($data_string). "n" ; $request.= 'Connection: closen' ; $request.= 'Cookie: $cookien' ; $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扩展

$ch = curl_init(); $timeout = 5; curl_setopt ($ch, CURLOPT_URL, ‘http: //www.ido321.com/'); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $file_contents = curl_exec($ch); curl_close($ch); echo $file_contents;

 

原文首发:http://www.ido321.com/1297.html

查看更多关于PHP:6种GET和POST请求发送方法的详细内容...

  阅读:40次