美文网首页
CURL库使用

CURL库使用

作者: 铁匠简记 | 来源:发表于2018-07-03 15:47 被阅读6次

前面想说的话:
这两天在公司一直在负责对接中国电信物联网开放平台接口的编写,所以一直在用CURL库,所以重新封装了轮子,为了方便自己使用,记录下来。
容我先吐个槽:不论谁家的开放接口文档,都有坑;为避免掉坑里出不来,同一份文档,最好手里不止一个版本,因为官方兼容各个版本。

/**
* @name curlSsl 这里不设置默认请求方式
* @param string $url 接收数据的api
* @param string $vars 提交的数据
* @param int $second 要求程序必须在$second秒内完成,负责到$second秒后放到后台执行
* @return string or boolean 成功且对方有返回值则返回
* 由于php的curl只支持pem格式、der、eng格式,而之前生成的是p12的格式,所以需要转换一下
*PKCS#12 到 PEM 的转换
*openssl pkcs12 -nocerts -nodes -in cert.p12 -out private.pem
*验证
*openssl pkcs12 -clcerts -nokeys -in cert.p12 -out cert.pem
*/
function curlSsl($url, $vars, $aHeader = array(),$type= 'post',$code=false, $second = 10)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_VERBOSE, '1');   //debug
    curl_setopt($ch, CURLOPT_TIMEOUT, $second);   // 超时时间
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 是否要求返回数据
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  // 是否检测服务器的证书是否由正规浏览器认证过的授权CA颁发的
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);  // 是否检测服务器的域名与证书上的是否一致
    curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');      // 证书类型,"PEM" (default), "DER", and"ENG".
    curl_setopt($ch, CURLOPT_SSLCERT, config('secure.cert'));  // 证书存放路径,这里示意
    curl_setopt($ch, CURLOPT_SSLCERTPASSWD, config('secure.password'));  // 证书密码,这里示意
//        curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');  // 私钥类型,"PEM" (default), "DER", and"ENG".
//        curl_setopt($ch, CURLOPT_SSLKEY,'');  // 私钥存放路径

    //设置header信息
    if ( $aHeader ) {
        curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);
    }

    // 判断请求类型
    if ( $type == 'put' ){
        curl_setopt($ch, CURLOPT_PUT, true);
    }elseif ( $type == 'delete' ){
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
    }elseif ( $type == 'get' ){
        curl_setopt($ch, CURLOPT_HTTPGET, true);
    }elseif( $type == 'post' ){
        // 通过post请求
        curl_setopt($ch, CURLOPT_POST, true);
    }

    // 提交的数据
    if ($vars){
        curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
    }
    $data = curl_exec($ch);
    $httpCode = curl_getinfo($ch,CURLINFO_HTTP_CODE);
    curl_close($ch);

    // 这步判断是因为平台有的接口只返回状态码,不带数据的
    if (!$data && $httpCode === 200 && $code) {
        return $httpCode;
    }

    // 只要请求成功都直接返回,在调用处做后续处理。
    if ($data){
        return $data;
    }
    else{
        return false;
    }
}

相关文章

  • Android中将curl转http

    前置:由于Android本身不支持curl,若要在Android中使用curl,必须引入curl库: 将curl库...

  • 2018-04-04-PHP cURL 访问微信 https 接

    作为 PHP 开发者,需要发起网络请求,都是使用 cURL 扩展库。 PHP cURL 扩展,使用 curl_in...

  • CURL库使用

    前面想说的话:这两天在公司一直在负责对接中国电信物联网开放平台接口的编写,所以一直在用CURL库,所以重新封装了轮...

  • Debian Linux下增加php对curl扩展的支持

    使用php -m查看php当前已开启扩展库 原本在安装php时没有设置curl扩展库,最近项目需要curl扩展库的...

  • php无法开启curl库解决办法

    php版本5.6无论使用网上的什么方法都无法开启curl库。php解决高版本无法开启curl库问题 经过测试,放到...

  • curl 库的使用

    一个简单的调用 Face++ 人脸识别 API 示例 运行结果 进行简单的封装

  • 安装yasm (汇编编译器)和 nasm

    一 、关于curl 命令 curl 是一款实用的URL命令行网络通讯工具/库,使用curl 命令可以执行常用的ht...

  • CURL

    PHP使用CURL详解 CURL是一个非常强大的开源库,支持很多协议,包括HTTP、FTP、TELNET等,我们使...

  • PHP使用CURL详解

    PHP使用CURL详解 Curl是一个非常强大的开源库,支持很多协议,包括HTTP、FTP、TELNET等,我们使...

  • curl多线程crash分析

    问题描述 在需要并发请求http时,需要通过多线程使用curl库。curl的handle对象只要保证在一个线程中创...

网友评论

      本文标题:CURL库使用

      本文链接:https://www.haomeiwen.com/subject/pbxjuftx.html