2012-03-15 66 views
5

我正在連接到使用cookie驗證用戶的API服務。 我從命令提示符下使這兩個語句,它的工作原理。在Cookie中使用Curl時讀取Cookie,如何?

curl -d "u=username&p=password" -c ~/cookiejar https://domain/login 

curl -b https://domain/getData 

現在我想用捲曲,使兩個等價的PHP文件的login.phpget_data.php

我在get_data.php

它不能正常工作使用

curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile); 

login.php

curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile); 

。 Cookie文件正在創建,但第二次捲曲不會讀取它。 這是正確的做法嗎?我是否必須單獨閱讀cookie文件並設置標題Cookie?任何幫助將不勝感激。謝謝。

+0

無論腳本是隻讀還是寫cookie,通常都最好設置兩個cookie選項。 – 2012-03-15 05:22:57

+0

會在'get_data.php'中自動添加標頭值'Cookie'來捲曲請求嗎? – Diode 2012-03-15 05:25:14

+0

如果該特定的curl實例可以讀取由另一個腳本創建的cookie文件,那麼是的。 – 2012-03-15 05:35:53

回答

14

這將做到這一點。我跑這對Google.com爲例:

<?PHP 

// open a site with cookies 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://www.google.com"); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0'); 
curl_setopt($ch, CURLOPT_HEADER ,1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER ,1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION ,1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
$content = curl_exec($ch); 

// get cookies 
$cookies = array(); 
preg_match_all('/Set-Cookie:(?<cookie>\s{0,}.*)$/im', $content, $cookies); 

print_r($cookies['cookie']); // show harvested cookies 

// basic parsing of cookie strings (just an example) 
$cookieParts = array(); 
preg_match_all('/Set-Cookie:\s{0,}(?P<name>[^=]*)=(?P<value>[^;]*).*?expires=(?P<expires>[^;]*).*?path=(?P<path>[^;]*).*?domain=(?P<domain>[^\s;]*).*?$/im', $content, $cookieParts); 
print_r($cookieParts); 

?> 

other examples對於如何有效地解析比如字符串。

1

是否有任何方法來查看curl請求標頭。我可以從curl實例中獲得它嗎?或者是否有任何工具像Mac的提琴手(我工作的Mac OS)?

是的,你可以用下面的獲得請求頭:

<?php 
    ... 
    curl_setopt($ch, CURLINFO_HEADER_OUT, true); // enable tracking 
    $result = curl_exec($ch); 
    var_dump(curl_getinfo($ch, CURLINFO_HEADER_OUT)); // request headers 
?> 
0

在PHP 5.5.0,它看起來像你現在可以得到餅乾在同一行,但我只拿回一個空數組使用此用PHP 7.1.0:

CURLINFO_COOKIELIST - 讓所有已知的餅乾

$cookies = curl_getinfo($curl, CURLINFO_COOKIELIST); 
+0

我也有這些問題,你是否能夠解決它們,讓CURLINFO_COOKIELIST輸出cookie?對我來說,它正在工作,但當我最近通過'yum update -y'更新時,結果總是空的。 – maddo7 2017-02-20 16:08:38

+0

嘗試使用第一個請求設置'curl_setopt($ ch,CURLOPT_COOKIELIST,array(''));'。這爲我解決了它。 – maddo7 2017-02-20 19:52:27