什么是curl?curl 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等 。php也支持 curl 库 。本文将介绍 curl 的一些高级特性,本期文章会教大家如何使用它 。
为什么要用 curl?
文章插图
是的,我们可以通过其他办法获取网页内容 。大多数时候,我因为想偷懒,都直接用简单的PHP函数:
代码演示
$content = file_get_contents("http://www.xxx.com"); //直接获取网页上的内容
$lines = file("http://www.xxx.com");
readfile(http://www.xxx.com);
不过,这种做法缺乏灵活性和有效的错误处理 。而且,你也不能用它完成一些高难度任务——比如处理coockies、验证、表单提交、文件上传等等,那么这个时候curl就派上用处 。
因为curl本身是一种功能强大的库,支持很多不同的协议能提供 URL 请求相关的各种细节信息 。
下面直接教大家如何使用curl
在学习更为复杂的功能之前,先来看一下请求的基本步骤:
// 1. 初始化
$ch = curl_init();
// 2. 设置选项,包括URL
curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
// 3. 执行并获取html文档内容
$output = curl_exec($ch);
// 4. 释放curl句柄
curl_close($ch);
文章插图
第二步(也就是 curl_setopt() 有一长串cURL参数可供设置,它们能指定URL请求的各个细节 。要一次性全部介绍完比较难,今天我们只试一下那些更常用也更有用的选项 。
$output = curl_exec($ch);
if ($output === FALSE) {//检测是否错误
echo "curl Error: " . curl_error($ch);
}
curl_exec($ch);
$info = curl_getinfo($ch);//直接返回结果给info
返回的数组中包括了以下信息:
curl_setopt设置的参数
"URL" //资源网络地址
"CONTENT_TYPE" //内容编码
"HTTP_CODE" //HTTP状态码
"HEADER_SIZE" //header的大小
"REQUEST_SIZE" //请求的大小
"FILETIME" //文件创建时间
"SSL_VERIFY_RESULT" //SSL验证结果
"REDIRECT_COUNT" //跳转技术
"TOTAL_TIME" //总耗时
"NAMELOOKUP_TIME" //DNS查询耗时
"CONNECT_TIME" //等待连接耗时
"PRETRANSFER_TIME" //传输前准备耗时
"SIZE_UPLOAD" //上传数据的大小
"SIZE_DOWNLOAD" //下载数据的大小
"SPEED_DOWNLOAD" //下载速度
"SPEED_UPLOAD" //上传速度
"DOWNLOAD_CONTENT_LENGTH" /下载内容的长度
"UPLOAD_CONTENT_LENGTH" //上传内容的长度
"STARTTRANSFER_TIME" //开始传输的时间
"REDIRECT_TIME" //重定向耗时
我们利用 CURLOPT_HTTPHEADER 选项来设定我们发送出的HTTP请求头信息(http headers),包括user agent信息和默认语言 。然后我们来看看这些特定网站是否会把我们重定向到不同的URL 。
以下为引用的内容:
// 测试用的URL
$urls = array(
"http://www.aaa.com",
"http://www.bbb.com",
"http://www.ccc.com"
);
$browsers = array(
"standard" => array (
"user_agent" => "Mozilla/5.0 (windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 3.5.30729)",
"language" => "en-us,en;q=0.5"
),
"iphone" => array (
"user_agent" => "Mozilla/5.0 (iPhone; U; CPU like mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A537a Safari/419.3",
"language" => "en"
),
"french" => array (
"user_agent" => "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)",
"language" => "fr,fr-FR;q=0.5"
)
);
foreach ($urls as $url) {
echo "URL: $urln";
foreach ($browsers as $test_name => $browser) {
$ch = curl_init();
// 设置 url
curl_setopt($ch, CURLOPT_URL, $url);
// 设置浏览器的特定header
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"User-Agent: {$browser['user_agent']}",
"Accept-Language: {$browser['language']}"
));
// 页面内容我们并不需要
curl_setopt($ch, CURLOPT_NOBODY, 1);
推荐阅读
- 小红书|贵价丛中过钱包抖三抖?才发现原来平价也可以出奇迹!
- 保洁大妈:情侣住酒店,最好先开手机摄像功能再开灯,不然会吃亏
- 微信多开,不用任何插件
- 手机为什么不再需要内存卡了,其原因你知道吗,原来都在这里
- 手机自动亮度调节功能,是省电还是费电?
- 手机内存不够用,微信才是“内存杀手”?这个默认功能最好要关掉
- 手机分屏哪家强,OPPOColorOS 最新分屏功能教你做人
- 使用华为手机拍照,这3个照片编辑功能要知道,能让照片好看几倍
- 如何利用手机的HDR功能来拍照
- 华为S5700交换机设置IP-MAC绑定功能