今天再次學習 curl
PHP 提供了curl_*的系列函數來進行操作curl。
常用的有以下幾個:
Curl_init 初始化一個curl 會話
Curl_close 這個當然是關閉咯- -!
Curl_error 返回當前會話的錯誤信息
Curl_errno 錯誤編號
Curl_setopt 設置一個選項,這個函數很重要
Curl_setopt_array 這個和上面的curl_setopt 一樣,不同的是這個一次可以設置多個選項
Curl_exec 執行curl 會話
這幾個算比較常用的了,其他的函數如果要用自己Google。
下面我們來模擬GET 請求:
[php]
$ch = curl_init();//這裡初始化了一個會話
curl_setopt($ch, CURLOPT_URL, 'http://www.google.com');//設置了一個遇$ch 會話相關的地址
curl_exec($ch);//執行會話
curl_close($ch);//關閉會話
$ch = curl_init();//這裡初始化了一個會話
curl_setopt($ch, CURLOPT_URL, 'http://www.google.com');//設置了一個遇$ch 會話相關的地址
curl_exec($ch);//執行會話
curl_close($ch);//關閉會話
浏覽一下,google 的首頁內容就輸出在浏覽器上了。
如果你問那我不要他輸出,而是返回呢?
那麼加個選項就行了。
[php]
$ch = curl_init();//這裡初始化了一個會話
curl_setopt($ch, CURLOPT_URL, 'http://www.google.com');//設置了一個遇$ch 會話相關的地址
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//這裡告訴curl 我不要輸出我要返回
$data = curl_exec($ch);//那麼在執行的時候curl 就會返回給你了。哈哈,太聽話了..
curl_close($ch); //關閉會話
$ch = curl_init();//這裡初始化了一個會話
curl_setopt($ch, CURLOPT_URL, 'http://www.google.com');//設置了一個遇$ch 會話相關的地址
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//這裡告訴curl 我不要輸出我要返回
$data = curl_exec($ch);//那麼在執行的時候curl 就會返回給你了。哈哈,太聽話了..
curl_close($ch); //關閉會話上面是模擬GET 請求,那麼下面來模擬POST 的:
[php] view plaincopyprint?//這裡用了我自己的程序來做實驗.. - -!
$url = 'http://www.phpfamily.cn/Shop/login?formaction=login';//POST 到的地址
$query = 'name=xiaokai&password=xiaokai';//這個是提交的數據
$ch = curl_init($url);//初始化的時候就關聯一個url 地址
curl_setopt($ch, CURLOPT_POST, true);//這裡告訴他我要用post 方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $query);//給他post 的數據
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//我不要輸出要返回
$data = curl_exec($ch);//OK,執行後返回給你了。
curl_close($ch);//關閉
echo $data;//輸出結果,提示登錄成功了。
//這裡用了我自己的程序來做實驗.. - -!
$url = 'http://www.phpfamily.cn/Shop/login?formaction=login';//POST 到的地址
$query = 'name=xiaokai&password=xiaokai';//這個是提交的數據
$ch = curl_init($url);//初始化的時候就關聯一個url 地址
curl_setopt($ch, CURLOPT_POST, true);//這裡告訴他我要用post 方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $query);//給他post 的數據
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//我不要輸出要返回
$data = curl_exec($ch);//OK,執行後返回給你了。
curl_close($ch);//關閉
echo $data;//輸出結果,提示登錄成功了。
自己寫次代碼,不要copy,因為copy 你永遠也學不會。
上面代碼執行後會提示登錄成功,那已經登錄成功了。
但是有個問題,這樣登錄沒有保存刷新次登錄就失效了,這個問題就和你的浏覽器沒開cookie 是
一樣的。那麼下面我們來給curl 開cookie。
[php]
$url = 'http://www.phpfamily.cn/Shop/login?formaction=login';//POST 到的地址
$query = 'name=xiaokai&password=xiaokai';//這個是提交的數據
$jar = realpath('cookie.txt');//cookie 保存的地址
$ch = curl_init($url);//初始化的時候就關聯一個url 地址
curl_setopt($ch, CURLOPT_POST, true);//這裡告訴他我要用post 方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $query);//給他post 的數據
curl_setopt($ch, CURLOPT_COOKIEJAR, $jar);//這裡給他cookie 文件保存的地址,然後就會自動將cookie
內容寫入到cookie 文件中了。
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//我不要輸出要返回
$data = curl_exec($ch);//OK,執行後返回給你了
curl_close($ch);//關閉
echo $data;//輸出結果,提示登錄成功了。
$url = 'http://www.phpfamily.cn/Shop/login?formaction=login';//POST 到的地址
$query = 'name=xiaokai&password=xiaokai';//這個是提交的數據
$jar = realpath('cookie.txt');//cookie 保存的地址
$ch = curl_init($url);//初始化的時候就關聯一個url 地址
curl_setopt($ch, CURLOPT_POST, true);//這裡告訴他我要用post 方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $query);//給他post 的數據
curl_setopt($ch, CURLOPT_COOKIEJAR, $jar);//這裡給他cookie 文件保存的地址,然後就會自動將cookie
內容寫入到cookie 文件中了。
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//我不要輸出要返回
$data = curl_exec($ch);//OK,執行後返回給你了
curl_close($ch);//關閉
echo $data;//輸出結果,提示登錄成功了。
好了, 就加了個CURLOPT_COOKIEJAR 選項就OK 了, 是不是很簡單。注意這裡的
CURLOPT_COOKIEJAR 的值必須是絕對路徑,也就是說你指定的cookie 文件保存路徑必須是絕對路徑。
[php]
$url = 'http://www.phpfamily.cn/Shop/register';
$jar = realpath('cookie.txt');//cookie 保存的地址
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_COOKIEFILE, $jar);//這裡指定cookie 文件保存的路徑
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);//關閉
echo $data;
$url = 'http://www.phpfamily.cn/Shop/register';
$jar = realpath('cookie.txt');//cookie 保存的地址
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_COOKIEFILE, $jar);//這裡指定cookie 文件保存的路徑
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);//關閉
echo $data;
繼續, 上面保存了cookie 那麼再次模擬登錄的時候就不用POST 了, 加個選項
CURLOPT_COOKIEFILE 就可以直接登錄了。
再次預覽,會提示你已經登錄過了。這樣登錄後就保存cookie 然後就可以干任何事了,比如提交
評論、留言、等等。