[PHP] CURL獲取cookie,模擬登錄獲取數據

需求:通過CURL先登錄,然後獲取登錄後的cookie,在請求數據接口的時候帶上這個cookie即可!

直接貼代碼:

 1 <?php
 2 
 3 class CurlLoginDemo
 4 {
 5     public $config = [
 6         //登錄接口和參數
 7         'login_url' => 'http://localhost/login',
 8         'login_post_data' => [
 9             'username' => 'aaa',
10             'password' => 'aaa',
11         ],
12         
13         //數據接口
14         'list_url' => 'http://localhost/list',
15         'list_post_data' => [
16             'page' => 1,
17             'rows' => 30,
18         ],
19      ];
20     public $cookie = '';
21 
22     //登錄接口,獲取cookie
23     public function login()
24     {
25         $re = $this->post_curl($this->config['login_url'], $this->config['login_post_data'], 1);
26         
27         // 解析HTTP數據流
28         list($header, $body) = explode("\r\n\r\n", $re);
29         // 解析COOKIE
30         preg_match("/set\-cookie:([^\r\n]*)/i", $header, $matches);
31         //請求的時候headers 帶上cookie就可以了
32         $cookie = explode(';', $matches[1])[0];
33 
34         $this->cookie = trim($cookie);
35     }
36 
37     //執行登錄後的操作
38     public function execute()
39     {
40         $re = $this->post_curl($this->config['list_url'], $this->config['list_post_data']);
41 
42         //$json = json_decode($re, true);
43 
44         var_dump($re);
45     }
46 
47     //發送請求
48     function post_curl($url, $params=[], $isShowHeader=0){
49         $httpInfo = array();
50         $ch = curl_init();
51 
52         curl_setopt( $ch, CURLOPT_HEADER, $isShowHeader);
53         curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );
54         curl_setopt( $ch, CURLOPT_USERAGENT , 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36' );
55         curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT , 30 );
56         curl_setopt( $ch, CURLOPT_TIMEOUT , 30);
57         curl_setopt( $ch, CURLOPT_RETURNTRANSFER , true );
58 
59         curl_setopt( $ch , CURLOPT_POST , true );
60         curl_setopt( $ch , CURLOPT_POSTFIELDS , http_build_query($params));
61         curl_setopt( $ch , CURLOPT_URL , $url );
62 
63         if($this->cookie){
64             curl_setopt($ch, CURLOPT_COOKIE, $this->cookie);//設置cookie
65         }
66 
67         $response = curl_exec( $ch );
68         if ($response === FALSE) {
69           return false;
70         }
71 
72         curl_close( $ch );
73         return $response;
74     }
75 
76     //啓動
77     public function start()
78     {
79         try{
80             $this->login();
81             if(!$this->cookie){
82                 throw new \Exception("登錄失敗!");
83             }
84             $this->execute();
85         }catch(\Exception $e){
86             print($e);
87         }
88     }
89 
90 }
91 
92 $obj = new CurlLoginDemo();
93 $obj->start();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章