zoukankan      html  css  js  c++  java
  • curl实例

    curl 模拟浏览器请求,比如获取远程浏览器内容,虽然可以用file_get_contents来代替,但curl还支持浏览器类型,cookie和来源ip等,功能相比强大。

    windows下安装curl拓展 :

    在php.ini  搜索   extension_dir =   

    将 extension_dir = "./ext"    前面的分号去掉   当前目录下的ext便是拓展文件目录  去报目录下存在  php_curl.dll文件

    将 ;extension=php_curl.dll  前面的分号去掉

    <?php
    function request($url, $method = 'get', $data = null){
        //初始化实例
        $ch = curl_init($url);
        //curl_setopt($ch, CURLOPT_URL, $url);   初始化不传$url参数时使用
        //返回数据不直接输出
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        //如果是https请求
        $ssl = preg_match('/^https:///i', $url) ? TRUE : FALSE;
        if ($ssl) {
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hosts
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // 不从证书中检查SSL加密算法是否存在
        }
        //如果是post请求
        switch ($method) {
            case 'post':
                $hadFile = false;
                //开启post请求
                curl_setopt($ch, CURLOPT_POST, 1);       //启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。
                //文件上传   5.5以上会走到这步 
                if (is_array($data)) {
                    if (class_exists('CURLFile')) {
                        foreach ($data as $key => $value) {
                            if (is_string($value) && strpos($value, '@') === 0 && is_file(realpath(ltrim($value, '@')))) {
                                $data[$key] = new CURLFile(realpath(ltrim($value, '@')));
                                $hadFile = true;
                            }
                        }
                    } elseif (defined('CURLOPT_SAFE_UPLOAD')) {
                        $hadFile = true;
                    }
                }
                //发送post数据
                //全部数据使用HTTP协议中的"POST"操作来发送。要发送文件,在文件名前面加上@前缀并使用完整路径。这个参数可以通过urlencoded后的字符串类似'para1=val1&para2=val2&...'或使用一个以字段名为键值,字段数据为值的数组。如果value是一个数组,Content-Type头将会被设置成multipart/form-data。
                $datastr = (!$hadFile && is_array($data)) ? http_build_query($data) : $data;
                curl_setopt($ch, CURLOPT_POSTFIELDS, $datastr);
                break;
        }
        //发送请求
        $result = curl_exec($ch);
        //关闭连接返回返回值
        curl_close($ch);
        if (empty($result)) {
            exit("错误请求");
        }
        return $result;
    }
    
    注意:要发送文件时,要在文件名前面加上  @  前缀并使用完整路径

    如果需要判断数据是否完整

      $info = curl_getinfo($ch);

      file_put_contents("d:/aa.png", $result);

      $size = filesize("d:/aa.png");
     
         if ($size != $info['size_download']) {
             echo "下载的数据不完整,请重新下载";
         } else {
             echo "下载数据完整";
         }

    curl_setopt()介绍  http://www.runoob.com/php/func-curl_setopt.html

    //通过curl获取天气 
    function weather(){ $city="西安"; $url="http://api.map.baidu.com/telematics/v2/weather?location=".$city."&ak=B8aced94da0b345579f481a1294c9094"; $content=request($url); $content=simplexml_load_string($content); echo $content->results->result[0]->date; echo "<br>"; echo $content->results->result[0]->weather; echo "<br>"; echo $content->results->result[0]->wind; echo "<br>"; echo $content->results->result[0]->temperature; echo "<br>"; }
    //通过curl获取快递信息   
     function express(){
            $postid="887693023517080150";
            $url="https://www.kuaidi100.com/query?type=yuantong&postid=".$postid;
            $content=request($url);
            $content=json_decode($content);        //数组
    
            $content=$content['data'];
            foreach($content as $key=>$value){
                echo $value['time']."###".$value['context'];
                echo "<br>";
            }
        }

     更多实例      https://mp.weixin.qq.com/s?__biz=MzIxMDA0OTcxNA==&mid=2654254693&idx=1&sn=082382b78efc421e8a72b78cd99fd595&scene=19#wechat_redirect

  • 相关阅读:
    移动端网页头部meta
    fastclick使用方法
    淘宝店铺
    Yii框架下使用redis做缓存,读写分离
    计算一个页面中的数据库查询次数和用时
    数据库优化设计
    工作中使用频率比较高的常规验证器
    框架结构
    smarty
    PDO
  • 原文地址:https://www.cnblogs.com/mengor/p/7681373.html
Copyright © 2011-2022 走看看