1、首先說明一下,curl的百科解釋是:
PHP[2]支持的由Daniel Stenberg創建的libcurl庫允許你與各種的服務器使用各種類型的協議進行連接和通訊。libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap協議。libcurl同時也支持HTTPS認證、HTTP POST、HTTP PUT、 FTP 上傳(這個也能通過PHP的FTP擴展完成)、HTTP 基于表單的上傳、代理、cookies和用戶名+密碼的認證。PHP中使用cURL實現Get和Post請求的方法
最簡單的一個模型就是如下圖所示的模型:
就是初始化,配置,取頁面源代碼數據,關閉。一個非常簡單的例子如下所示:
<?php //1.初始化,創建一個新cURL資源 $ch = curl_init(); //2.設置URL和相應的選項 curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com/"); curl_setopt($ch, CURLOPT_HEADER, 0); //3.抓取URL并把它傳遞給瀏覽器 curl_exec($ch); //4.關閉cURL資源,并且釋放系統資源 curl_close($ch); ?>
3、POST的過程比較復雜一些,但是原理和瀏覽器提交過程相同,簡單來說,就是利用curl直接將用戶名和密碼(或者其他相應的參數,這個根據post頁面具體討論)提交到post指向的處理頁面即可。過程如下圖:
當然,我們可以看到過程幾乎一樣,只是在curl初始化之后,要生成一些列的post參數,然后再提交,等待返回數據。
例子如下:
<?php/** * Curl版本 * 使用方法: * $post_string = "app=request&version=beta"; * request_by_curl('http://facebook.cn/restServer.php',$post_string); * IT部落格版權所有 http://www.itbuluoge.com *///設置POST值$post_string='memberName=123&password=456';//調用登陸函數echo request_by_curl('http://login.ddd.cn/index.php/action/UserLogin/referer/1', $post_string);//登陸函數function request_by_curl($remote_server, $post_string){ $cookie_jar = tempnam('./tmp','JSESSIONID'); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $remote_server); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, "Jimmy's CURL Example beta"); $data = curl_exec($ch); curl_close($ch); return $data;}?>
上面的例子就可以顯示,我們可以成功或者失敗的返回數據。
但是上面有一個問題,就是失效性,也就是我們僅僅登陸成功了登陸頁是沒有效果的,服務器不一定保持了我們的登陸狀態,所以如果我們直接取其他頁面的數據,網站又會給出未登錄提示,這里就需要設置一個cookie。
4、cookie設置及登陸
根據圖形,我們可以分兩步走,第一步模擬登陸并且設置cookie。第二步讀取cookie并且加載需穴ky"http://www.it165.net/qq/" target="_blank" html' target='_blank'>class="keylink">qq1x8K9uvO3w87KtcTSs8PmoaM8L3A+CjxwPs/Cw+a4+LP2suLK1LPJuaa1xMD919OhozwvcD4KPHA+PHByZSBjbGFzcz0="brush:java;"><?php/** * Curl版本 * 使用方法: * $post_string = "app=request&version=beta"; * request_by_curl('http://facebook.cn/restServer.php',$post_string); * IT部落格版權所有 http://www.itbuluoge.com *///設置POST值$post_string='memberName=fdsfs&password=ddd';//調用登陸函數request_by_curl('http://login.ddd.cn/index.php/action/UserLogin/referer/1', $post_string);//返回固定頁面數據echo request_url_data("http://user.ddd.cn/dispatcher.php/module/Personal/");//登陸函數function request_by_curl($remote_server, $post_string){ $cookie_jar = tempnam('./tmp','JSESSIONID'); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $remote_server); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, "Jimmy's CURL Example beta"); //設置文件讀取并提交的cookie路徑 curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt '); //保存 $data = curl_exec($ch); curl_close($ch); return $data;}function request_url_data($url){ //初始化,創建一個新cURL資源 $ch = curl_init(); //讀取cookie curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt '); //設置URL和相應的選項 curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); //抓取URL并把它傳遞給瀏覽器 $data=curl_exec($ch); //關閉cURL資源,并且釋放系統資源 curl_close($ch);}?>
根據結果,顯示成功。這里我的網址和相關參數全部修改了,讀者可以根據自己的需要做相應的修改。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答