[英]Use Browser cookies in PHP Curl to log-in to a website
我正在嘗試從網站上獲取一些數據,該數據僅適用於已簽名的用戶,但是我無法使用CURL進行登錄,因為它使用了CAPTCHA,所以我正在嘗試使用生成的Cookie我在瀏覽器上進行了注冊,以允許CURL訪問僅允許已簽名用戶使用的頁面。
假設我已將使用瀏覽器登錄時該網站生成的所有cookie復制到cookie.txt文件中。 我有兩個問題:
我應該以哪種格式將cookie存儲在cookie.txt中?
如何加載這些Cookie以供CURL使用?
$curl = curl_init();
//load cookies from cookie.txt code
curl_setopt($curl,CURLOPT_URL,$url);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,TRUE);
curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,10);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_USERAGENT, $userAgent);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($curl, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
$contents = curl_exec($curl);
curl_close($curl);
echo $contents;
編輯1
$url="https://google.com";
$curl = curl_init();
curl_setopt($curl, CURLOPT_COOKIEJAR, '/Testing/cookie.txt');
curl_setopt($curl,CURLOPT_URL,$url);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,TRUE);
curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,10);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_USERAGENT, $userAgent); /
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($curl, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
$contents = curl_exec($curl);
curl_close($curl);
echo $contents;
嘗試了以上代碼以獲取Cookie文件的示例,但cookie.txt似乎保持空白。
編輯2
我將'/Testing/cookie.txt'
的路徑更改為__DIR__."/cookie.txt"
並在文件中生成了cookie,我將嘗試對其進行修改並使用COOKIEFILE,看看它是否可以工作。
編輯3
遵循以下提供的答案,並且按預期方式工作。
嘗試添加用於保存Cookie的選項:
curl_setopt($curl, CURLOPT_COOKIEFILE, 'cookies.txt');
curl_setopt($curl, CURLOPT_COOKIEJAR, 'cookies.txt');
驗證Cookie文件的格式:您可以設置
curl_setopt($ch, CURLOPT_COOKIEJAR, "path_to_the_cookie_file")
接下來,向任何設置cookie的網站運行CURL請求,然后檢查設置的cookie文件的格式。
發送Cookie:然后,使用所需的Cookie構建Cookie文件並使用設置
curl_setopt($ch, CURLOPT_COOKIEFILE, "path_to_the_cookie_file")
使您的CURL請求發送cookie。
編輯#1:從正式的PHP文檔( http://php.net/manual/en/function.curl-setopt.php ):
cookie文件可以是Netscape格式,也可以是純HTTP樣式的標頭轉儲到文件中。
編輯#2:這是CURL( source )生成的cookie文件的示例:
# Netscape HTTP Cookie File
# This file was generated by libcurl! Edit at your own risk.
.auto.com TRUE / FALSE 1452087781 ___suid 2ecfe4287cbeacd8399eaf98bec9ce0b.59089b9d033bc7c6dce8ea2fca139920
.auto.com TRUE / FALSE 1452865380 all7_user_region_confirmed 1
.auto.com TRUE / FALSE 1452865380 geo_location a%3A3%3A%7Bs%3A7%3A%22city_id%22%3Ba%3A0%3A%7B%7Ds%3A9%3A%22region_id%22%3Ba%3A1%3A%7Bi%3A0%3Bi%3A89%3B%7Ds%3A10%3A%22country_id%22%3Ba%3A0%3A%7B%7D%7D
.auto.com TRUE / FALSE 1423921380 autoru_sid ee094d60fa32eada_daf2da69dc79a59b7c8702a29554abbc
.auth.auto.com TRUE / FALSE 1421329026 autoru_sid
.auth.auto.com TRUE / FALSE 1421329026 autoru_sid_key
.auto.com TRUE / FALSE 1421329026 cc6882cb6b6f0c912cf9589734fcc1e6
.auto.com TRUE / FALSE 1452865027 user_name igor.savinkin5%40gmail.com
.auto.com TRUE / FALSE 1452865027 username igor.savinkin5%40gmail.com
編輯#3:我的cookies.txt文件中所有這些條目是什么? ( http://www.cookiecentral.com/faq/#3.5 )
從左到右,這是每個字段代表的內容:
域-創建AND且可以讀取變量的域。
flag-一個TRUE / FALSE值,指示給定域內的所有計算機是否可以訪問該變量。 該值由瀏覽器自動設置,具體取決於您為域設置的值。
path-變量在其域內有效的路徑。
安全-一個TRUE / FALSE值,指示是否需要與域的安全連接才能訪問該變量。
expiration-變量到期的UNIX時間。 UNIX時間定義為自格林尼治標准時間1970年1月1日00:00:00起經過的秒數。
name-變量的名稱。
value-變量的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.