天天看點

PHP:6種GET和POST請求發送方法

PHP:6種GET和POST請求發送方法

無論是暢言還是多說,我都需要從遠端抓取文章的評論數,然後存入本地資料庫。對于多說,請求的格式如下:

// 擷取評論次數,參數是文章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);

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;

     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;

來源:51cto