登录到 PHPguide Blog
*电子邮箱
*密码
忘记密码?
注册 PHPguide Blog
*电子邮箱
*验证码
*密码
找回密码
*电子邮箱
*验证码
*密码
建议/反馈
*标题
*内容
php之curl的介绍及其几点注意事项
分类:
php
最后修订:
2020-01-06 22:21

摘要:在最近的工作中使用到的curl比较频繁,也踩到了一些坑,现在讲curl的使用过程与使用方法记录下来,方便以后查阅,可能的话也给看到这篇文章的人一点点启发就可以了

1.curl介绍

       cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等。

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和许多不同种的服务器进行勾搭、搭讪和深入交流。

2.过程:

        第一次使用到curl是一个第三方支付接口,需要服务器与第三方服务器进行数据交流,在网上查到了这个库,使用起来爽歪歪!!完成了业务需求

3.如何使用curl

       我用过phpStudy集成环境和wamp集成环境。都有一个前题,即开启curl扩展

  • 打开php.ini配置文件将;extension=php_curl.dll头部的分号去掉;
  • 重启apache

4.给大家介绍两个封装方法

/**

 * GET 请求

 * @param string $url

 */

function http_get($url){

    $oCurl = curl_init();

    if(stripos($url,"https://")!==FALSE){

        curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);

        curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE);

        curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1

    }

    curl_setopt($oCurl, CURLOPT_URL, $url);

    curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 );

    $sContent = curl_exec($oCurl);

    $aStatus = curl_getinfo($oCurl);

    curl_close($oCurl);

    if(intval($aStatus["http_code"])==200){

        return $sContent;

    }else{

        return false;

    }

}



/**

 * POST 请求

 * @param string $url

 * @param array $param

 * @param boolean $post_file 是否文件上传

 * @return string content

 */

function http_post($url,$param,$post_file=false){

    $oCurl = curl_init();

    if(stripos($url,"https://")!==FALSE){

        curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);

        curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false);

        curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1

    }

    if (is_string($param) || $post_file) {

        $strPOST = $param;

    } else {

        $aPOST = array();

        foreach($param as $key=>$val){

            $aPOST[] = $key."=".urlencode($val);

        }

        $strPOST =  join("&", $aPOST);

    }

    curl_setopt($oCurl, CURLOPT_URL, $url);

    curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 );

    curl_setopt($oCurl, CURLOPT_POST,true);

    curl_setopt($oCurl, CURLOPT_POSTFIELDS,$strPOST);

    $sContent = curl_exec($oCurl);

    $aStatus = curl_getinfo($oCurl);

    curl_close($oCurl);

    if(intval($aStatus["http_code"])==200){

        return $sContent;

    }else{

        return false;

    }

}

5.Curl的使用注意事项

(1).踩过坑的,在curl中的url中包含空格,回到值curl异常停止(这是在一个第三方短信接口对接的过程中遇到的问题,发现部分短信发送总是失败,最会找到他们的共同原因就是因为短信内容中包含空格,所以在使用curl的时候一定要对url去空格)

(2)对于application/json格式编码的数据,$_POST是不能直接获取的,需要通过file_get_contents(“php://input”)或者$GLOBALS[‘HTTP_RAW_POST_DATA']的方式获取。

目前就php curl的理解就这么多,学无止境,等我收货到更多的时候我会对这篇文章进行更改的!


点赞(6 分享(10

发表评论



评论内容