PHP中的数据传输神器curl
什么是cURL?
官方是这样解释的:使用URL语法传输数据的命令行工具。
cURL:我不生产资源,我只是资源的搬运工。。。
cURL的使用场景
- 网页资源
- 编写网页爬虫
- WebService数据接口资源
- 动态获取接口数据,比如天气,号码归属地等等
- FTP服务器里面的文件资源
- 下载FTP服务器里面的文件
- 其他资源
- 所有网络上的资源都可以用cURL访问和下载到
检查php是否可以使用cURL
可以看到在我的Linux下是支持cURL的
在PHP中使用cURL
cURL实战
- 用cURL做一个简单的网页爬虫
- 用cURL获取天气信息
- 用cURL操作FTP服务器中的数据
- 用cURL访问HTTPS资源
1.网页爬虫
抓取百度的首页
<?php
//初始化
$curl = curl_init("http://www.baidu.com");
//进行抓取
curl_exec($curl);
//关闭
curl_close($curl);
?>
执行这段程序看看会发生什么吧!没错,打开这个文件就打印出了百度的首页!
那么问题来了!如果我想把取过来的网页中百度两个字替换为牛逼该怎么做呢?
<?php
//初始化curl,但不传入网页信息
$curlobj = curl_init();
//传入网页信息
curl_setopt($curlobj, CURLOPT_URL, "http://www.baidu.com");
//设置获取之后先不打印出获取到的值,而是保存到一个变量里
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($curlobj);
//关闭
curl_close();
//对网页内容进行替换
echo str_replace("百度", "牛逼", $output);
?>
执行这个文件看一下会发生什么吧!
2.获取天气信息
因为Webservice原因可能导致多次访问后不可用,这里说的只是一种方法,也可是使用百度天气api来获取天气信息哦。
代码如下:
<?php
$data = 'theCityName=北京';
$curlobj = curl_init();
curl_setopt($curlobj, CURLOPT_URL, "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName");
curl_setopt($curlobj, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36');
curl_setopt($curlobj, CURLOPT_HEADER, 0);
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);
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)
));
$rtn = curl_exec($curlobj);
if(!curl_errno($curlobj)) {
$xml = simplexml_load_string($rtn);
}else {
echo 'Curl error: '.curl_error($curlobj);
}
var_dump($xml);
curl_close($curlobj);
?>