本人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)