本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加)。
QQ群: 281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29LoD19) QQ:1542385235
本小节的名称为 fsockopen,curl与file_get_contents,具体是探讨这三种方式进行网络数据输入输出的一些汇总。关于 fsockopen 前面已经谈了不少,下面开始转入其它。这里先简单罗列一下一些常见的抓取网络数据的一些方法。
1. 用 file_get_contents 以 get 方式获取内容:
3 |
$html = file_get_contents($url); |
2. 用fopen打开url,以get方式获取内容
03 |
$fp = fopen($url, 'r'); |
04 |
stream_get_meta_data($fp); |
08 |
$result .= fgets($fp, 1024); |
10 |
echo "url body: $result"; |
3. 用file_get_contents函数,以post方式获取url
这种方法我们之前点了一下,具体可以参考 stream_context_create()模拟POST/GET 这篇文章。
04 |
'site'=>'www.nowamagic.net', |
05 |
'name'=>'nowa magic'); |
07 |
$data = http_build_query($data); |
13 |
'header' => 'Content-type:application/x-www-form-urlencoded', |
20 |
$context = stream_context_create($options); |
21 |
$result = file_get_contents($url, false, $context); |
4. 用 fsockopen 函数打开url,以get方式获取完整的数据,包括header和body
这种方法在小节前面谈得很多了,这里不厌其烦地再列举一下:
03 |
function get_url($url,$cookie=false) |
05 |
$url = parse_url($url); |
06 |
$query = $url['path']."?".$url['query']; |
08 |
$fp = fsockopen( $url['host'], $url['port']?$url['port']:80 , $errno,$errstr, 30); |
14 |
$request = "GET $query HTTP/1.1\r\n"; |
15 |
$request .= "Host: $url[host]\r\n"; |
16 |
$request .= "Connection: Close\r\n"; |
17 |
if($cookie) $request.="Cookie: $cookie\n"; |
23 |
$result .= @fgets($fp, 1024); |
30 |
function GetUrlHTML($url,$cookie=false) |
32 |
$rowdata = get_url($url,$cookie); |
35 |
$body= stristr($rowdata,"\r\n\r\n"); |
36 |
$body=substr($body,4,strlen($body)); |
45 |
echo GetUrlHTML($url); |
程序输出:
01 |
Query:/php/sock.php?site=nowamagic.netHTTP/1.1 200 OK |
02 |
Date: Wed, 19 Feb 2014 06:06:25 GMT |
03 |
Server: Apache/2.2.3 (CentOS) |
04 |
X-Powered-By: PHP/5.3.3 |
08 |
Content-Type: text/html; charset=UTF-8 |
12 |
Query:/php/sock.php?site=nowamagic.net Welcome to NowaMagic |
5. 用fsockopen函数打开url,以POST方式获取完整的数据,包括header和body
03 |
function HTTP_Post($URL,$data,$cookie, $referer="") |
07 |
$URL_Info=parse_url($URL); |
11 |
$referer="www.nowamagic.net"; |
14 |
foreach($data as $key=> $value) |
15 |
$values[]="$key=".urlencode($value); |
16 |
$data_string=implode("&",$values); |
19 |
if(!isset($URL_Info["port"])) |
24 |
$request.="POST ".$URL_Info["path"]." HTTP/1.1\n"; |
25 |
$request.="Host: ".$URL_Info["host"]."\n"; |
26 |
$request.="Referer: $referer\n"; |
27 |
$request.="Content-type: application/x-www-form-urlencoded\n"; |
28 |
$request.="Content-length: ".strlen($data_string)."\n"; |
29 |
$request.="Connection: close\n"; |
31 |
$request.="Cookie: $cookie\n"; |
34 |
$request.=$data_string."\n"; |
36 |
$fp = fsockopen($URL_Info["host"],$URL_Info["port"]); |
41 |
$result .= fgets($fp, 1024); |
51 |
'site'=>'www.nowamagic.net', |
52 |
'name'=>'nowa magic'); |
57 |
echo HTTP_Post($url, $data, $cookie, $referer); |
程序输出:
02 |
Date: Wed, 19 Feb 2014 06:15:38 GMT |
03 |
Server: Apache/2.2.3 (CentOS) |
04 |
X-Powered-By: PHP/5.3.3 |
08 |
Content-Type: text/html; charset=UTF-8 |
6. 使用curl库,使用curl库之前,可能需要查看一下php.ini是否已经打开了curl扩展。
使用 curl 代码比较简洁,代码也比较规范,容易理解:
05 |
curl_setopt ($ch, CURLOPT_URL, $url); |
06 |
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); |
07 |
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); |
08 |
$file_contents = curl_exec($ch); |
这里就大概列举这么 6 种抓取网络数据的方式,也是比较常见的,让大家先有个总体的理解,还有各方法的比较。
本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加)。
QQ群: 281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29LoD19) QQ:1542385235
我的淘宝店,可以进去逛逛噢:https://shop108912636.taobao.com/index.htm?spm=2013.1.w5001-7867000954.3.1d29318dPlLar7&scene=taobao_shop
QQ:1542385235 (PHP、Java、安卓苹果app制作修改、页面切图、各类模板修改、仿站,数据库修复、WAP制作修改 。我们团队是专门做网站开发的,都是有3年以上工作经验。需要后台系统开发,网页页面制作,app制作,ui设计的请加我qq联系。非诚勿扰!!)
本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加!)。
QQ群: 281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29LoD19)