今天幫一位朋友去撈某線上資料庫的資料,該線上資料庫有 Basic Authentication 的帳號密碼驗證(就是會跳一個 dialog 要輸入帳號密碼那種),因此在 cURL 連過去撈資料時,必須加送帳密,以及 Cookies 的部份(少送 Cookies 就被認為未登入了)。
簡單記錄一下程式碼:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $target_url); // 連接目標網址
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); // 儲存 Cookies
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); // 再傳送一開始獲得的 Cookies
curl_setopt($ch, CURLOPT_HEADER, 0); // 不要返回 header 資訊
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回字串,不要直接输出
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password); // Basic Authentication 帳號跟密碼
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POST, true); // 啟用POST
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query( array( "foo" => $foo ) )); // 這邊就塞 POST 的東西囉
$result = curl_exec($ch);
curl_close($ch);
// 以下就是解析字串了,不是本篇重點,參考就好
$html = str_get_html($result);
$tr = $html->find('tr');
$max = count($html->find('tr'));
for ( $i = 1 ; $i < $max ; $i++ ) {
echo $tr[$i]->find('td', 0)->plaintext;
}
PS. 至於取回輸出結果並解析這塊,我是用 PHP Simple HTML DOM Parser 做的,跟 jQuery 用法相似,簡單上手。