php curl的作用及用法
阿新 • • 發佈:2019-01-30
curl 模擬瀏覽器請求,比如獲取遠端瀏覽器內容,雖然可以用file_get-contents來代替,但curl還支援瀏覽器型別,cookie和來源ip等,功能相比強大
常用相關函式
curl_init() 初始化curl會話
curl_setopt() 設定curl傳輸選項
curl_exec 執行curl會話
curl_errno 返回最後一次的錯誤程式碼
curl_error 返回當前會話嘴週一次錯誤的字串
curl_close 關閉curl會話
function getCurl($url,$cookie = null,$post_data = null,$miao = null){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); if($cookie) { if($cookie =='auto') { $cookie_string = ''; $_COOKIE['user_id'] = 12; foreach($_COOKIE as $key=>$val) { $cookie_string .= $key.'='.$val.';'; } curl_setopt($ch, CURLOPT_COOKIE,$cookie_string); } elseif(is_array($cookie) && $cookie['type']=='cookie_file') { //echo $cookie['value']; curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie['value']); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie['value']); } else { curl_setopt($ch, CURLOPT_COOKIE,$cookie); } } if($post_data) { curl_setopt($ch, CURLOPT_POST, 1); // 把post的變數加上 curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); } //判斷超時處理 if(!empty($miao)){ curl_setopt($ch, CURLOPT_NOSIGNAL, 1); //注意,毫秒超時一定要設定這個 curl_setopt($ch, CURLOPT_TIMEOUT_MS, $miao); //超時毫秒,cURL 7.16.2中被加入。從PHP 5.2.3起可使用 $head = curl_exec($ch); $curl_errno = curl_errno($ch); $curl_error = curl_error($ch); if($curl_errno>0){ $head = '2'; }else{ $head = $head; } }else{ $head = curl_exec($ch); } //$head = curl_exec($ch); //echo $url;echo 'bb';var_dump($head);exit; $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); return $head; }
該方法相比於file_get_contents最大的不同,就是可以將遠端的cookie資訊也獲得過來,這種情況適合於跨站的登入資訊的同步。比如你在www.demo.com下登入,然後到music.demo.com下應該也會是登入狀態,那怎樣實現這種情況呢?
在www下登入成功之後,將cookie資訊保留一份,然後在music下通過curl方式獲得cookie資訊,因為cookie相對來說不安全,所以在www下可以不把重要資訊放到cookie中而只把標誌使用者登入的資訊放入其中,比如使用者id,到了music中,使用者通過id在進行登入即可,仍然將使用者資訊取出進行登入的操作。
那麼問題來了了,既然在www下登入了在music也是登入狀態,那在music下登入了在www下也應該是登入狀態的,在其他子站下應該也是登入狀態的,所以,對於有多個子站的情況,我們應該講使用者登入資訊的處理放在一個公共的站點下面。每次都通過這裡來操作,而且,登入後的使用者資訊應該放到memcached等快取中,因為很明顯登入操作是一個操作頻繁的動作,應該減少使用者頻繁讀取資料庫帶來的壓力。