一、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常用方法
- curl_init([url])
- 创建一个新的cURL资源,初始化新会话,填写url则打开相应资源,也可以从curl_setopt处设置,返回cURL句柄(错误返回false)
- curl_setopt(resource $ch , int $option , mixed $value)
- 为cURL句柄设置选项,返回值为bool详细参数
- $ch 是由curl_init()返回的句柄资源,$option为当前设置句柄的选型(CURLOPT_XXX),$value为在$option上设置的值
- curl_exec($ch)
- 执行cURL会话
- 不设置CURLOPT_RETURNTRANSFER时返回bool值,设置后返回原生的内容(php5.1.3开始)
- curl_close($ch)
- 关闭cURL会话,释放资源,句柄也会被删除
- 没有返回值
三、访问接口传参数并获取返回值
- 以微信支付下单api为例,发送接收均为xml
-
$ch = curl_init(); curl_setopt($ch,CURLOPT_URL, $url); //curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); //不证书进行校验 curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2); //严格校验证书 curl_setopt($ch, CURLOPT_HEADER, FALSE); //设置header curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); //要求结果为字符串且输出到屏幕上 curl_setopt($ch, CURLOPT_POST, TRUE); //发送post请求 curl_setopt($ch, CURLOPT_POSTFIELDS, ToXml($para)); //设置发送的数据 $data = curl_exec($ch); //执行句柄 curl_close($ch) //关闭句柄 $data = simplexml_load_string($data,'SimpleXMLElement', LIBXML_NOCDATA); $data = json_encode($data); $data = json_decode($data,true);
-
- 以接口对接访问为例,发送接收均为json
-
$post_data = json_encode($post_data); $curl = curl_init($url); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: application/json")); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); $data = curl_exec($curl); curl_close($curl); $data = json_decode($data,true);
-