zoukankan      html  css  js  c++  java
  • php curl 请求api 接口

    官方文档curl :  http://www.runoob.com/php/php-ref-curl.html

    php开启curl : 

      ① 打开 php.ini 文件  extension=php_curl.dll  // 去掉前面的分号

    ② 检查php.ini的extension_dir值是哪个目录,检查该目录有无php_curl.dll,如果没有的请下载php_curl.dll

    ③ 再把php目录中的libeay32.dll,ssleay32.dll拷到c:windowssystem32里面

    ④ 重启下 apache或者iis即可。

      ⑤使用phpinfo()函数查看配置信息,查看curl是否开启; 或使用extension_loaded('curl')函数,返回布尔类型的值

      ⑥php 版本建议 5.6 以上,测试过 5.4+nginx 请求不到数据,原因暂且不知

    curl  post 请求函数

    function http_post($url, $data = null){
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
            if (!empty($data)){
                curl_setopt($curl, CURLOPT_POST, 1);
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            }
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            $output = curl_exec($curl);
            curl_close($curl);
            return $output;
        }

    curl get 请求函数

    function http_get($url){
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            $output = curl_exec($ch);
            curl_close($ch);
            return $output;
        }

    http get/post请求:

    header("Content-type: text/html; charset=utf-8");
    $url = 'https://www.baidu.com/';// 页面编码与php 执行页面编码一致
    /** curl  api 接口调用访问
     * @parem $url  接口地址
     * @parem $data 如果使用post 方式发送数据传递 $data 关联数组参数
     * @parem $cookie  设定HTTP请求中"Cookie: "部分的内容;多个cookie用分号分隔,分号后带一个空格(例如, "fruit=apple; colour=red")
     * */
    function curl($url,$data=null,$cookie=null)
    {
        // 初始化 curl
        $curl = curl_init();
    
        // 设置URL和相应的选项 curl_setopt — 设置一个cURL传输选项。
        //1.由 curl_init() 返回的 cURL 句柄; 2.需要设置的CURLOPT_XXX选项;3.将设置在option选项上的值
            curl_setopt($curl, CURLOPT_URL, $url); // url
            curl_setopt($curl, CURLOPT_HEADER, 0); // 将头文件的信息作为数据流输出; 1 为输出 ;0 不输出
    
        //将curl_exec()获取的信息以文件流的形式返回,而不是直接输出:
        //1 或者 true为不输出,0 或false  直接输出到页面上
            curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
    
        // http 请求 不验证证书和hosts 请求数据时使用,跳过验证; 例如参数 返回数据
        // CURLOPT_SSL_VERIFYPEER 禁用后cURL将终止从服务端进行验证  默认为true
        // 如果CURLOPT_SSL_VERIFYPEER(默认值为2)被启用,CURLOPT_SSL_VERIFYHOST需要被设置成TRUE否则设置为FALSE。
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    
        // 如果传送数据---- 使用post 方式
         if(isset($data) && !empty($data))
         {
            //设置post方式提交 启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。
             //表示是否启用第二个option,这里为CURLOPT_POST,设置为1,表示启用时会发送一个常规的POST请求
             curl_setopt($curl, CURLOPT_POST, 1);
    
             /*这个参数可以通过urlencoded后的字符串类似'para1=val1&para2=val2&...'或使用一个以字段名为键值,
             字段数据为值的数组。如果value是一个数组,Content-Type头将会被设置成multipart/form-data。
              * */
             curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
         }
        // 如果传递 HTTP请求中 的 Cookie
        if(isset($cookie) && !empty($cookie))
        {
            curl_setopt($curl, CURLOPT_COOKIE, $cookie);
        }
    
        // 抓取URL并把它传递给浏览器 执行curl 返回页面数据
            $data = curl_exec($curl);
        // 关闭curl 连接
            curl_close($curl);
    }
    //  调用函数
    curl($url);

    curl  get/post 请求发送 array/json类型数据

    // 页面编码与php 执行页面编码一致
    header("Content-type: text/html; charset=utf-8");
    
    function curl_request($url,$data=array(),$https=array(),$cookie=null,$json=false){
        // 初始化 curl
        $curl = curl_init();
        // 设置 url
        curl_setopt($curl, CURLOPT_URL, $url);
        
        //证书验证
        if(empty($https))
        {
            // http请求 不验证证书和 hosts 请求数据时使用,跳过验证; 例如参数 返回数据
            // CURLOPT_SSL_VERIFYPEER 禁用后cURL将终止从服务端进行验证  默认为true
            // 如果CURLOPT_SSL_VERIFYPEER(默认值为2)被启用,CURLOPT_SSL_VERIFYHOST需要被设置成TRUE否则设置为FALSE。
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
            
        }else{
            curl_setopt($curl, CURLOPT_SSLCERTTYPE, $https['PEM']);
            curl_setopt($curl, CURLOPT_SSLCERT, $https['cert_path']);
            curl_setopt($curl, CURLOPT_SSLKEYTYPE, $https['PEM']);
            curl_setopt($curl, CURLOPT_SSLKEY, $https['key_path']);
        }
    
        // 如果发送数据
        if (!empty($data)) 
        {
            //将头文件的信息作为数据流输出; 1 为输出 ;0 不输出    
            curl_setopt($curl, CURLOPT_HEADER, 0);
            //发送JSON数据,
            if(($json==true) && is_array($data)){
                 curl_setopt($curl, CURLOPT_HTTPHEADER,array('Content-Type:application/json;charset=utf-8','Content-Length:'.strlen($data)));
                $data = json_encode($data,JSON_UNESCAPED_SLASHES);
            }        
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);      
        }
        
        // 如果传递 HTTP请求中 的 Cookie
        if(isset($cookie) && !empty($cookie))
        {
            curl_setopt($curl, CURLOPT_COOKIE, $cookie);
        }
        
        //将curl_exec()获取的信息以文件流的形式返回,而不是直接输出:1 或者 true为不输出,0 或false  直接输出到页面上
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        //设置连接超时时间
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 60);
        //设置请求超时时间
        curl_setopt($curl, CURLOPT_TIMEOUT, 60);
        
        // 也可将参数放入数组一次传入 curl_setopt_array($ch, $params); //传入curl参数
    
        // 执行
        $result = curl_exec($curl);
        // 获取错误信息
        $errorno = curl_errno($curl);
        if ($errorno) {
            return $errorno;
        }else{
            return $result
        }
        // 关闭连接
        curl_close($curl);
    }

    curl 发送文件

     /**
         * @param $url 请求地址
         * @param $filename 文件名
         * @param $path 文件临时路径
         * @param string $type 文件类型
         * @return mixed
         * @url https://blog.csdn.net/notaloney/article/details/101370497
         */
        function curl_post_file($url,$header=[],$filename,$path,$type = 'text/plain')
        {
            //php 5.5以上的用法
            if (class_exists('CURLFile')) {
                $data = array(
                    'file' => new CURLFile(realpath($path), $type, $filename),
                );
            } else {
                //5.5以下会走到这步
                $data = array(
                    'file'=>'@'.realpath($path).";type=".$type.";filename=".$filename,
                );
            }
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_POST, true );
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            curl_setopt($ch, CURLOPT_HEADER, false);
            if(!isset($header)){
                $header=array('Content-Type:application/json;charset=utf-8','Content-Length:'.strlen($data));
            }
            curl_setopt($ch, CURLOPT_HTTPHEADER,$header);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            $return_data = curl_exec($ch);
            curl_close($ch);
            return $return_data;
        }

     相关文章:PHP-curl multi批处理CPU负载过高的解决办法

          PHP使用curl_multi_exec多线程并发抓取数据

  • 相关阅读:
    Linux学习40 运维必备技能-Linux软件包管理yum企业实战
    【Kafka】Kafka集群基础操作!新手上路必备~
    【Kafka】Kafka集群环境搭建
    【Kafka】消息队列相关知识
    【Hadoop离线基础总结】oozie的安装部署与使用
    【Hadoop离线基础总结】Hue与oozie集成
    【Hadoop离线基础总结】oozie定时任务设置
    【Hadoop离线基础总结】oozie任务串联
    【Hadoop离线基础总结】oozie调度MapReduce任务
    【Hadoop离线基础总结】oozie调度hive
  • 原文地址:https://www.cnblogs.com/xuey/p/8461622.html
Copyright © 2011-2022 走看看