• php curl的使用


    我们来采集一个页面,通常情况下,我们会使用file_get_contents()函数来获取:

     1 <?php
     2  
     3 $str = file_get_contents('http://www.baidu.com');
     4  
     5 //或者是:
     6  
     7 $str = file("http://www.baidu.com");
     8  
     9 //或者是:
    10  
    11 readfile("http://www.baidu.com");
    12  
    13 ?>

    这样我们会发现,我们没有办法有效地进行错误处理,更重要的是我们没有办法完成一些高难度的任务:
    如:处理cookies,验证,表单提交,文件上传等等。这时候我们需要学习一下curl,来帮助自己实现这些复杂的功能。

    通过curl_setopt()函数可以方便快捷的抓取网页,curl_setopt 是php的一个扩展库。使用条件:需要在php.ini 中配置开启。(PHP 4 >= 4.0.2)

    //取消下面的注释

    extension=php_curl.dll
    

     GET数据案例:

    //1.初始化,创建一个新cURL资源
        $ch = curl_init();
    
    //2.设置URL和相应的选项
        curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com"); //需要获取的URL地址
        //curl_setopt($ch, CURLOPT_HEADER, 1);  //启用时会将头文件的信息作为数据流输出
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  // 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
        curl_setopt($ch, CURLOPT_TIMEOUT, 500);
    //3.抓取URL并把它传递给浏览器
        $data =curl_exec($ch);  
        
     //4.关闭cURL资源,并且释放系统资源
        curl_close($ch);
        var_dump($data);
    

     POST数据案例:

       $url = "http://localhost/demo.php";
      $post_data = array ("username" => "bob","key" => "12345");
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      // post数据
      curl_setopt($ch, CURLOPT_POST, 1);
      // post的变量
      curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
      $data = curl_exec($ch);
      curl_close($ch);
      //打印获得的数据
      print_r($data);
    

    获取access_token:

    1、新建一个access_token.json文件,要不然第一次运行会报错,

    2、新建一个demo.php,写自己APPID、SECRET

    <?php  
    	function getJsApiTicket(){
    	    $data = json_decode(file_get_contents("access_token.json"));
    	    if (@$data->expire_time < time()) {
    	        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET";
    	        $res = json_decode(httpGet($url));
    	        if (isset($res->access_token)) {
    	            $access_token = $res->access_token;
    	        } else {
    	            $access_token = false;
    	        }
    	        if ($access_token) {
    	        	$datas=(object)[];
    	            $datas->expire_time = time() + 60;
    	            $datas->access_token = $access_token;
    
    	            $fp = fopen("access_token.json", "w+");
    	            fwrite($fp, json_encode($datas));
    	            fclose($fp);
    	        }
    	    } else {
    	        $access_token = $data->access_token;
    	    }
    	
    	    return $access_token;
    	}
    
    	function httpGet($url){
    		    $curl = curl_init();
    		    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    		    curl_setopt($curl, CURLOPT_TIMEOUT, 500);
    		    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    		    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    		    curl_setopt($curl, CURLOPT_URL, $url);
    		
    		    $res = curl_exec($curl);
    		    curl_close($curl);
    		
    		    return $res;
    	}
    
    	echo getJsApiTicket();
    ?>
    
    
     
    

    总体来说,file_get_contents()用来处理本地文件的数据合适,curl用来获取远程的数据比较合适。。。。

  • 相关阅读:
    1024X768大图 (Wallpaper)
    (Mike Lynch)Application of linear weight neural networks to recognition of hand print characters
    瞬间模糊搜索1000万基本句型的语言算法
    单核与双核的竞争 INTEL P4 670对抗820
    FlashFTP工具的自动缓存服务器目录的功能
    LDAP over SSL (LDAPS) Certificate
    Restart the domain controller in Directory Services Restore Mode Remotely
    How do I install Active Directory on my Windows Server 2003 server?
    指针与指针变量(转)
    How to enable LDAP over SSL with a thirdparty certification authority
  • 原文地址:https://www.cnblogs.com/c-961900940/p/5251160.html
Copyright © 2020-2023  润新知