使用 Cookies
cURL 可以將響應中收到的 cookie 保留在後續請求中。對於記憶體中的簡單會話 cookie 處理,只需一行程式碼即可實現:
curl_setopt($ch, CURLOPT_COOKIEFILE, "");
如果在銷燬 cURL 控制代碼後需要保留 cookie,你可以指定儲存它們的檔案:
curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/cookies.txt");
然後,當你想再次使用它們時,將它們作為 cookie 檔案傳遞:
curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/cookies.txt");
但請記住,除非你需要在不同的 cURL 手柄之間攜帶 cookie,否則這兩個步驟是不必要的。對於大多數用例,只需將 CURLOPT_COOKIEFILE
設定為空字串即可。
例如,Cookie 處理可用於從需要登入的網站檢索資源。這通常是兩步程式。首先,POST 到登入頁面。
<?php
# create a cURL handle
$ch = curl_init();
# set the URL (this could also be passed to curl_init() if desired)
curl_setopt($ch, CURLOPT_URL, "https://www.example.com/login.php");
# set the HTTP method to POST
curl_setopt($ch, CURLOPT_POST, true);
# setting this option to an empty string enables cookie handling
# but does not load cookies from a file
curl_setopt($ch, CURLOPT_COOKIEFILE, "");
# set the values to be sent
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
"username"=>"joe_bloggs",
"password"=>"$up3r_$3cr3t",
));
# return the response body
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
# send the request
$result = curl_exec($ch);
第二步(標準錯誤檢查完成後)通常是一個簡單的 GET 請求。重要的是為第二個請求重用現有的 cURL 控制代碼。這可確保第一個響應中的 cookie 將自動包含在第二個請求中。
# we are not calling curl_init()
# simply change the URL
curl_setopt($ch, CURLOPT_URL, "https://www.example.com/show_me_the_foo.php");
# change the method back to GET
curl_setopt($ch, CURLOPT_HTTPGET, true);
# send the request
$result = curl_exec($ch);
# finished with cURL
curl_close($ch);
# do stuff with $result...
這僅用作 cookie 處理的示例。在現實生活中,事情往往更復雜。通常,你必須執行登入頁面的初始 GET 以提取需要包含在 POST 中的登入令牌。其他站點可能會根據其使用者代理字串阻止 cURL 客戶端,要求你更改它。