php cURL获取网络资源

URL语法传输数据的命令行工具,就是客户端向服务器请求资源的工具,他在我们开发中引用广泛,例如以下几个使用场景:1、网页资源:网页爬虫;2、WebService数据接口资源:动态获取接口数据,比如天气、号码归属地等;3、FTP服务器里面的文件资源:下载FTP服务器里面的文件;基本所有网上的资源都可以使用cURL访问和下载到。

首先要看我们的php是否安装了cURL拓展,下面是查看的命令行,当然也可以通过php的函数phpinfo()进行查看:

      windows:php -i
      linux:php -i | gerp cUR

使用cURL有抓取网络数据分4个步骤:
1、初始化curl,调用curl_init();
2、向服务器发送请求,curl_exec();
3、接收服务器数据,curl_exec();
4、关闭curl,调用curl_close()

下面是一些实例:

1.简单的抓取网页

$curl=curl_init();
curl_exec($curl,CURLOPT_URL,'http://www.baidu.com');curl_exec($curl,CURLOPT_RETURNRANSFER,true);//执行后不直接打印出
$output=curl_exec($curl);
curl_close($curl);

2.登录某个网站获取相应个人数据

$data='username=******&password=****$remember=****';
$curlobj=curl_init();//设置访问的网页的url
curl_setopt($curlobj, CURLOPT_URL, '*****登录页****');//cookie相关设置,这部分设置需要在所有会话开始前设置
date_default_timezone_set('PRC');//使用cookie时,必须先设置时区
curl_setopt($curlobj,CURLOPT_COOKIESESSION,true);
curl_setopt($curlobj,CURLOPT_COOKIEFILE,'cookiefile');
curl_setopt($curlobj,CURLOPT_COOKIEJAR,'cookiefile');
curl_setopt($curlobj,CURLOPT_COOKIE,session_name().'='.session_id());//上方不变
curl_setopt($curlobj,CURLOPT_HEADER,0);
curl_setopt($curlobj,CURLOPT_FOLLOWLOCATION,1);//这样能够让curl支持页面跳转
curl_setopt($curlobj,CURLOPT_POST,1);
curl_setopt($curlobj,CURLOPT_POSTFIELDS,$data);
curl_setopt($curlobj,CURLOPT_HTTPHEADER,array('application/x-www-form-urlencoded;charset-utf-8','Content-length:'.strlen($data)));curl_exec($curlobj);//进行执行、curl_setopt($curlobj,CURLOPT_URL,'http://www/imooc.com/space/index');curl_setopt($curlobj,CURLOPT_POST,0);//抓取页面时需要将它设置为0
curl_setopt($curlobj,CURLOPT_HTTPHEADER,array('Content-type:text/xml'));
$output=curl_exec($curlobj);//执行curl_close($curlobj);

3.从ftp下载一个文件到本地

$curlobj=curl_init();
//设置访问的网页的url
curl_setopt($curlobj, CURLOPT_URL, 'ftp:/***ip***/dowloademo.text');
curl_setopt($curlobj,CURLOPT_HEADER,0);curl_setopt($curlobj,CURLOPT_RETURNTRANSFER,1);
curl_setopt($curlobj,CURLOPT_TIMEOUT,300);//设置连接超时
curl_setopt($curlobj,CURLOPT_USERPWD,'用户名:密码');//FTP用户名:密码
$outfile=fopen('dest.txt', 'wb');//保存到本地的文件名
curl_setopt($curlobj,CURLOPT_FILE,$outfile);
$rtn=curl_exec($curlobj);
fclose($outfile);
if (!curl_errno($curlobj)) { 
    echo "return:".$rtn;
} else { 
    echo 'Curl error:'.curl_error($curlobj);}curl_close($curlobj);
}
curl_close($curlobj);

在开发中,往往简单的抓取数据并不能满足我们的需求,还需要对数据进行一定的处理,例如正则匹配,下面是一个从中国气象台抓取农业气象图片案例,不同的气象图片只需要不同的procode参数即可:

4.抓取天气

$curlobj = curl_init();
// curl_setopt($curlobj, CURLOPT_URL, "http://products.weather.com.cn/product/Index/index/procode/JC_WX_DBWD");
curl_setopt($curlobj, CURLOPT_URL, "http://products.weather.com.cn/product/Index/index/procode/JC_WX_DBWDJP");
curl_setopt($curlobj, CURLOPT_HEADER, 0);curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curlobj, CURLOPT_HTTPHEADER, array("application/x-www-form-urlencoded;charset=utf-8"));
$result = curl_exec($curlobj);
if (!curl_errno($curlobj)) { //对所得内容进行正则匹配 
    $matchs=array(); 
    $result=preg_replace("/[\t\n\r]+/","",$result);//去除空格 
    $partner='/
(.*?)<\/div>/'; preg_match_all($partner, $result, $matchs); //得到部分匹配内容 $partner='/
php cURL获取网络资源_第1张图片
我的公众号

你可能感兴趣的:(php cURL获取网络资源)