首页 电脑 电脑学堂 查看内容

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

2015-10-27 11:54 1782 0

摘要: 在i94web博客中,我试过了畅言和多说两种社会化评论框,后来还是抛弃了畅言,不安全。无论是畅言还是多说,我都需要从远程抓取文章的评论数,然后存入本地数据库。对于多说,请求的格式如下:php代码:// 获取评论次 ...
关键词: url request data cookie contents curl get fp http body

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

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

[代码]php代码:

// 获取评论次数,参数是文章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方式获取内容:


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' ; 
 
// ** 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 ; 


声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部