zoukankan      html  css  js  c++  java
  • 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用来获取远程的数据比较合适。。。。

  • 相关阅读:
    cmd 进入mysql 小技巧
    【scikit-learn】交叉验证及其用于參数选择、模型选择、特征选择的样例
    向txt文件中写入换行
    CTabCtrl的使用
    unicode下数据之间的转换
    下载数据库包
    python3.5.1语法
    配置Python+selenium+firefox自动化测试
    使用Tesseract OCR识别验证码
    white的配置使用
  • 原文地址:https://www.cnblogs.com/c-961900940/p/5251160.html
Copyright © 2011-2022 走看看