PHP cURL工具的简单介绍

cURL通常是指使用URL语法进行数据传递的命令行工具和库,本文所介绍的是其PHP拓展最基本的使用。

cURL主要用来进行数据抓取,当然,还有更多强大的功能,一些复杂的操作,例如处理Cookie、表单数据提交等实现起来也要比其他方法简单。

1.安装与使用

Windows下:修改php.ini的设置,打开php_curl.dll拓展即可。

Linux下: # wget http://curl.haxx.se/download/curl-7.17.1.tar.gz

# tar zxvf curl-7.17.1.tar.gz  //解压

#cd curl-7.17.1

# ./configure --prefix=/usr/local/curl

# make

# make install

安装完成后通过phpinfo()来查看是否安装成功。

ps:如果是用的集成包来搭建PHP环境的话,一般而言cURL的功能都是开启的。

2.用cURL抓取网页的基本流程

最基本的抓取网页的步奏主要分为以下几步:

(1)初始化

(2)设置相关选项

(3)执行获取网页文档

(4)释放cURL句柄

例如:我们以抓取百度首页为例,代码示范这个流程:

<?php
//初始化一个curl句柄
$ch = curl_init();
//对相关选项进行设置
curl_setopt($ch,CURLOPT_URL,‘www.baidu.com‘);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
//执行抓取
$output = curl_exec($ch);
//释放curl句柄
curl_close($ch);
//输出抓取的数据
echo $output;
?>

在整个流程中,比较重要的步奏其实在于选项设置部分,即curl_setopt()函数,来指定URL请求的细节,具体设置选项的意义在后面介绍。

为了使上述代码具有可调试性,现在增加几行代码,来输出cURL执行后的相关信息。

<?php
......
curl_exec($ch);
//获取执行请求后相关信息
$info = curl_getinfo($ch);
print_r($info);//打印信息数组
?>

对于抓取百度首页,打印出的信息数组如下:

Array
(
[url] => HTTP://www.baidu.com/  
[content_type] => text/html     
[http_code] => 200
[header_size] => 689
[request_size] => 52
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0.016
[namelookup_time] => 0
[connect_time] => 0
[pretransfer_time] => 0
[size_upload] => 0
[size_download] => 14613
[speed_download] => 913312
[speed_upload] => 0
[download_content_length] => 14613
[upload_content_length] => 0
[starttransfer_time] => 0.016
[redirect_time] => 0
[redirect_url] => 
.........
)

其中,可以通过size_download字段信息来校验下载的信息是否完整:

对抓取的数据的filesize进行大小计算,来对比返回信息中size_download字段。

<?php
......
file_put_contents("D:/temp/test.html", $output);
$size = filesize(‘D:/temp/test.html‘);
if($size==$info[‘size_download‘])
{
echo ‘success‘;
}
else
{
echo ‘fail‘;
}
?>

3.用cURL伪造头信息

有些网站只允许手机端访问,例如腾讯的手机网(3g.qq.com),当用浏览器直接输入地址访问时,会跳转到http://3gqq.qq.com/,这是因为腾讯会识别访问该网址的UA(User Agent),来判断用户所使用的设备,进而进行相应的跳转,所以可以用cURL模拟手机UA来访问。

在选项设置中添加:

curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0 (Linux; U; Android 4.1.1; zh-cn; MI 2S Build/JRO03L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 XiaoMi/MiuiBrowser/1.0");

来模拟安卓手机登陆访问。

返回的数据截图:

很显然,是手机网页。

4.cURL POST发送数据

有的网页通过form表单向服务器提交数据,当提交的method设置为post时候,我们也可以用cURL来进行提交。例如:

<?php
//初始化一个curl句柄
$ch = curl_init();
$postdata = array(‘name‘=>‘dog‘,‘age‘=>‘999‘,‘address‘=>‘china‘);
//对相关选项进行设置
curl_setopt($ch,CURLOPT_URL,‘http://localhost/form.php‘);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
//设置post选项
curl_setopt($ch, CURLOPT_POST, 1);
//绑定post变量
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
//执行
$output = curl_exec($ch);
//释放curl句柄
curl_close($ch);
echo $output;
?>

其中,form.php脚本将提交的form数据进行打印输出。

执行脚本后输入如下:

Array ( [name] => dog [age] => 999 [address] => china )

也可以用这个方法向某些安全性较差的网站、留言板进行数据提交或者制作一个灌水机器人。

5.cURL相关设置项

前面曾经说过,cURL中灵魂性的东西就是选项设置,通过设置各种选项来指定cURL的细节。选项过多,不一一罗列,可以参考这里

时间: 2024-10-30 21:51:51

PHP cURL工具的简单介绍的相关文章

一、使用工具的简单介绍

学习数据库知识,不能只光光停留在阅读课本知识上,这样不光学习吃力,而且会让你慢慢崩溃,最终心理会出现一种对数据库知识的抵触心理,这是我在很长一段时间领会到的一点心得,为什么现在突然想对数据库进行学习:主要原因是系统上线后日常工作,维护,取值都几乎处处都与数据库打交道,感觉自己微薄的数据知识有点力不从心,往往会遇到一下让自己茫然的问题出来:还有就是大量的数据存储在服务器中,但挖掘出来的数据很少,使得大量有价值的数据存于"海底",这导致数据价值本身的搁置,浪费,想通过对数据加强学习,可以更

Jmeter(一)工具的简单介绍(z)

一.JMeter介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序).它可以用来测试静态和动态资源的性能,例如:静态文件,Java Servlet,CGI Scripts,Java Object,数据库和FTP服务器等等.JMeter可用于模拟大量负载来测试一台服务器,网络或者对象的健壮性或者分析不同负载下的整体性能. 同时,JMeter可以帮助你对你的应用程序进行回归测试.通过你创建的测试脚本和assertions来验

自动化运维工具ansible简单介绍

一.Ansible介绍Ansible 简单的说是一个配置管理系统(configuration management system).你只需要可以使用 ssh 访问你的服务器或设备就行.它也不同于其他工具,因为它使用推送的方式,而不是像 puppet 等 那样使用拉取安装agent的方式.ansible可以帮助我们完成一些批量任务,或者完成一些需要经常重复的工作.? 模块化:调用特定的模块,完成特定任务? 有Paramiko,PyYAML,Jinja2(模板语言)三个关键模块? 支持自定义模块?

Java学习笔记43(打印流、IO流工具类简单介绍)

打印流: 有两个类:PrintStream,PrintWriter类,两个类的方法一致,区别在于构造器 PrintStream:构造方法:接收File类型,接收字符串文件名,接收字节输出流(OutputStream) PringWriter:构造方法:接收File类型,接收字符串文件名,接收字节输出流(OutputStream),接收字符输出流(Writer) 为其他流添加功能,可以方便地打印各种数据值,不同的是:它永远不会抛出IO异常 方法: package demo; import java

自动化构建工具gulp简单介绍及使用

一.简介及安装: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用她,我们不仅可以很愉快的编写代码,而且大大提高我们的工作效率 gulp的优点:基于流的操作.任务化. 常用api:src .dest.watch.task.pipe 由于gulp是基于node的所以使用的时候需要通过npm或者cnpm安装全局安装(cnpm i -g gulp) 常用的gulp需要安装的包括gulp-cl

Rust 中项目构建管理工具 Cargo简单介绍

cargo是Rust内置的项目管理工具.用于Rust 项目的创建.编译.执行,同一时候对项目的依赖进行管理,自己主动推断使用的第三方依赖库,进行下载和版本号升级. 一.查看 cargo 版本号 安装Rust之后,能够使用 cargo --version 查看cargo的版本号信息. $ cargo --version cargo 0.8.0-nightly (28a0cbb 2016-01-17) 二.创建新项目 1.使用 " new 项目名称" 创建新项目 cargo new hel

网站压力测试工具 Webbench简单介绍

Webbech能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况.Webbench的标准测试可以向我们展示服务器的两项内容:每秒钟相应请求数和每秒钟传输数据量.Webbench不但具有对静态页面的测试能力,还能对动态页面(ASP,PHP,JAVA,CGI)进行测试的能力.并且还支持对含有SSL的安全网站例如电子商务网站进行静态或动态的性能测试. 1.WebBench安装:wget http://www.ha97.com/code/webbench-1.5.tar.gztar

js工具库简单介绍

javascript mvc的解决方案: angularjs, backbone,underscore, 有空的时候了解一下. 移动端的几个需要了解一下,jq mobile, zepto.knockout,swipe,iscroll 还有一些剑走偏峰的作品比如:three.js,d3.js,famo.us, 还有一些国内jser的贡献,团队或个人的都有.比如qwrap, avalon,wind,kissy,还有一个百度的七巧板,腾讯的jx, 还有其它的如vue.js, lightbox, art

Linux curl使用简单介绍

http://www.linuxidc.com/Linux/2008-01/10891.htm -------------------------------------------------- Linux curl使用简单介绍 [日期:2008-01-29]     来源:Linux公社  作者:notech Curl是Linux下一个很强大的http命令行工具,其功能十分强大. 1) 二话不说,先从这里开始吧!$ curl http://www.linuxidc.com回车之后,www.l