简介:
curl是利用url语法在命令行方式下工作的文件传输工具,目前苹果机器已经内置了curl。curl是一个综合性的传输工具,对http、ftp等协议提供了广泛的支持,它甚至可以实现迅雷、快车等下载工具的所有功能。php中也提供了对curl语法的支持。
php支持的由daniel stenberg创建的libcurl库允许你与各种的服务器使用各种类型的协议进行连接和通讯。libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl同时也支持https认证、http post、http put、 ftp 上传(这个也能通过php的ftp扩展完成)、http 基于表单的上传、代理、cookies和用户名+密码的认证。
为什么需要curl: 一般读取文件(url)的方法是使用php内置的一些读文件函数,比如file_get_contents,file等(参见文章《php读取文件的常见方法》);但是这些方法都只能进行简单的文件读取,不能实现复杂的功能:向url post数据、使用代理服务器、读取使用ssl协议的url、url登陆认证等。而curl恰恰提供了对这些功能的支持。
开启方法: 拷贝php目录中的libeay32.dll 和 ssleay32.dll 两个文件到 c:\windows\system32 目录。 修改php.ini。去掉 extension = php_curl.dll 前面的分号。 重启apache服务 查看phpinfo,可以看到curl已开启
建立curl请求的基本步骤: 1. 初始化 使用curl_init方法初始化一个curl句柄
$ch = curl_init(http://www.example.com/);
curl_init方法提供了一个可选参数url,返回一个curl句柄供curl_setopt(), curl_exec()和curl_close() 函数使用。
如果在curl_init中没有指定url,则需要在curl_setopt中手工设置这个值,如果指定了url,则curlopt_url被自动设成这个值。
2. 设置变量 使用curl_setopt方法设置一个curl传输参数,或者使用curl_setopt_array批量设置一组参数。
curl_setopt($ch, curlopt_file, $fp);
curl_setopt($ch, curlopt_header, 0);
其中$ch为curl_init初始化时返回的curl句柄。
3. 执行并获取结果 使用curl_exec执行一个curl会话,成功时返回 true, 或者在失败时返回 false. 然而,如果 curlopt_returntransfer选项被设置,函数执行成功时会返回执行的结果,失败时返回 false 。
curl_exec($ch);
还可以使用curl_getinfo获取一个curl会话的信息。
curl_getinfo($info);
curl_getinfo返回的数组中包括如下信息:
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//重定向耗时 4. 关闭curl会话 使用curl_close关闭curl会话,并释放所有资源(包括curl句柄$ch等)。
curl_close($ch);
一个完整的例子如下:
当然我们还可以使用curl_error来获取会话的错误信息。
if($output === false)//注意是三个等号,表示检查返回值是boolean类型,如果是两个等号,返回值为空字符串也会被认为是false echo 'curl error:'.curl_error($ch);
例如,我们直接访问支付宝的首页,由于支付宝首页基于ssl协议,直接访问会提示证书错误:
curl error:ssl certificate problem, verify that the ca cert is ok. details:error:14090086:ssl routines:ssl3_get_server_certificate:certificate verify failed
使用代理服务器
向url post数据 'myname', 'pwd'=>'mypassword' ); //或者 $curlpost = 'name=myname&pwd=mypassword';
//初始化 $ch = curl_init(http://localhost/sp/getpost.php); //设置 curl_setopt($ch, curlopt_returntransfer, 1); curl_setopt($ch, curlopt_post, 1); //设施post方式提交数据 curl_setopt($ch, curlopt_postfields, $curlpost); //设置post的数据 //执行会话并获取内容 $output = curl_exec($ch); echo $output; //关闭curl会话 curl_close($ch);?>
使用浏览器用户代理
访问ssl协议的url
curl还有很多其他的实际用途,比如检查你博客的友情链接是否都有效,这里就需要用到curl_getinfo()函数返回的http_code值了;还可以实现上传文件的功能等等。
