在i94web博客中,我试过了畅言和多说两种社会化评论框,后来还是抛弃了畅言,不安全。
无论是畅言还是多说,我都需要从远程抓取文章的评论数,然后存入本地数据库。对于多说,请求的格式如下:
<span>// 获取评论次数,参数是文章ID</span><span>
<span>function</span> getCommCount($postid)
{
$jsondata = file_get_contents(<span>"http://api.duoshuo.com/threads/counts.json?short_name=i94web&threads=$postid"</span>);
<span>// 设置true返回数组,不设置或者是false则返回对象</span>
$resjson= json_decode($jsondata,<span>true</span>);
<span>return</span> $resjson[<span>'response'</span>][$postid][<span>'comments'</span>];
}</span>
对于远程请求,有很多种方法。今天,LZ就搜罗了六种,供大家参考。
1、用file_get_contents 以get方式获取内容:
立即学习“PHP免费学习笔记(深入)”;
<span><?php $url=<span>'http://www.ido321.com/'</span>; $html = file_get_contents($url); <span>echo</span> $html; ?></span>
2、用fopen打开url,用get方式获取
<span>$fp = fopen($url, <span>'r'</span>);
stream_get_meta_data($fp);
<span>while</span>(!feof($fp)) {
$result .= fgets($fp, 1024);
}
<span>echo</span> <span>"url body: $result"</span>;
fclose($fp);</span>
3、用file_get_contents 以post方式获取内容:
<span>$data = <span>array</span> (<span>'foo'</span> => <span>'bar'</span>); $data = http_build_query($data); $opts = <span>array</span> ( <span>'http'</span> => <span>array</span> ( <span>'method'</span> => <span>'POST'</span>, <span>'header'</span>=> <span>"Content-type: application/x-www-form-urlencodedrn"</span> . <span>'Content-Length: '</span> . strlen($data) . <span>'rn'</span>, <span>'content'</span> => $data ) ); $context = stream_context_create($opts); $html = file_get_contents(<span>'http://localhost/e/admin/test.html'</span>, <span>false</span>, $context); <span>echo</span> $html;</span>
4、用fsockopen函数打开url,以get方式获取完整的数据,包括header和body,fsockopen需要 PHP.ini 中 allow_url_fopen 选项开启
<span>function</span><span> get_url ($url,$cookie=<span>false</span>)
{
$url = parse_url($url);
$query = $url[path].<span>'?'</span>.$url[query];
<span>echo</span> <span>'Query:'</span>.$query;
$fp = fsockopen( $url[host], $url[port]?$url[port]:80 , $errno, $errstr, 30);
<span>if</span> (!$fp) {
<span>return</span> <span>false</span>;
} <span>else</span> {
$request = <span>'GET $query HTTP/1.1rn'</span>;
$request .= <span>'Host: $url[host]rn'</span>;
$request .= <span>'Connection: Closern'</span>;
<span>if</span>($cookie) $request.=<span>'Cookie: $cookien'</span>;
$request.=<span>'rn'</span>;
fwrite($fp,$request);
<span>while</span>(!@feof($fp)) {
$result .= @fgets($fp, 1024);
}
fclose($fp);
<span>return</span> $result;
}
}
<span>//获取url的html部分,去掉header</span>
<span>function</span> GetUrlHTML($url,$cookie=<span>false</span>)
{
$rowdata = get_url($url,$cookie);
<span>if</span>($rowdata)
{
$body= stristr($rowdata,<span>'rnrn'</span>);
$body=substr($body,4,strlen($body));
<span>return</span> $body;
}
<span>return</span> <span>false</span>;
}</span>
5、用fsockopen函数打开url,以POST方式获取完整的数据,包括header和body
<span>function</span><span> HTTP_Post($URL,$data,$cookie, $referrer=<span>''</span>)
{
<span>// parsing the given URL</span>
$URL_Info=parse_url($URL);
<span>// Building referrer</span>
<span>if</span>($referrer==<span>''</span>) <span>// if not given use this script as referrer</span>
$referrer=<span>'111'</span>;
<span>// making string from $data</span>
<span>foreach</span>($data <span>as</span> $key=>$value)
$values[]=<span>'$key='</span>.urlencode($value);
$data_string=implode(<span>'&'</span>,$values);
<span>// Find out which port is needed – if not given use standard (=80)</span>
<span>if</span>(!<span>isset</span>($URL_Info[<span>'port'</span>]))
$URL_Info[<span>'port'</span>]=80;
<span>// building POST-request:</span>
$request.=<span>"POST "</span>.$URL_Info[<span>'path'</span>].<span>" HTTP/1.1n"</span>;
$request.=<span>"Host: "</span>.$URL_Info[<span>'host'</span>].<span>"n"</span>;
$request.=<span>"Referer: $referern"</span>;
$request.=<span>"Content-type: application/x-www-form-urlencodedn"</span>;
$request.=<span>'Content-length: '</span>.strlen($data_string).<span>"n"</span>;
$request.=<span>'Connection: closen'</span>;
$request.=<span>'Cookie: $cookien'</span>;
$request.=<span>'n'</span>;
$request.=$data_string.<span>'n'</span>;
$fp = fsockopen($URL_Info[<span>'host'</span>],$URL_Info[<span>'port'</span>]);
fputs($fp, $request);
<span>while</span>(!feof($fp)) {
$result .= fgets($fp, 1024);
}
fclose($fp);
<span>return</span> $result;
}</span>
6、使用curl库,使用curl库之前,可能需要查看一下php.ini是否已经打开了curl扩展
<span>$ch = curl_init(); $timeout = 5; curl_setopt ($ch, CURLOPT_URL, ‘http:<span>//www.ido321.com/');</span> curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $file_contents = curl_exec($ch); curl_close($ch); <span>echo</span> $file_contents;</span>
原文首发:http://www.ido321.com/1297.html
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号