使用 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 客戶端,要求你更改它。