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

posted @ 2017-10-17 14:13  za_szybko  阅读(183)  评论(0编辑  收藏  举报