2012-03-15 11 views
5

Łączę się z usługą API, która uwierzytelnia użytkowników za pomocą plików cookie. Tworzę te dwie instrukcje z wiersza polecenia i to działa.Czytanie cookie podczas korzystania z Curl w php, jak?

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

curl -b https://domain/getData 

Teraz chcę zrobić dwie równoważne plików php login.php i get_data.php użyciu zwijania.

Używam

curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile); 

w login.php

i

curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile); 

w get_data.php

nie działa. Plik cookie jest tworzony, ale drugi plik curl go nie odczytuje. Czy to właściwy sposób? Czy muszę osobno odczytać plik cookie i ustawić nagłówek Cookie? Każda pomoc będzie doceniona. Dzięki.

+0

Zazwyczaj najlepiej jest ustawić obie opcje plików cookie, niezależnie od tego, czy skrypt odczytuje lub zapisuje pliki cookie. –

+0

Czy wartość nagłówka 'Cookie' zostanie automatycznie dodana do żądania zwijania w' get_data.php'? – Diode

+0

, jeśli ta konkretna instancja curl może odczytać plik cookie utworzony przez inny skrypt, a następnie tak. –

Odpowiedz

14

To wystarczy. I uruchomić go przed Google.com jako przykład:

<?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); 

?> 

Zobacz other examples dla jak skutecznie analizować takie jak struny.

1

czy istnieje metoda wyświetlenia nagłówków żądań zwijania. Czy mogę go pobrać z instancji curl? czy jest jakieś narzędzie, takie jak skrzypek dla Maca (ja pracuję z Mac OS)?

Tak, można uzyskać nagłówki żądania z następujących czynności:

<?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

W PHP 5.5.0 to wygląda można teraz dostać cookies w jednej linii, ale tylko wrócić pustą tablicą za pomocą tego z PHP 7.1.0:

CURLINFO_COOKIELIST - uzyskać wszystkie znane ciasteczka

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

Mam również te problemy, czy byłeś w stanie je rozwiązać, aby CURLINFO_COOKIELIST wyświetlał pliki cookie? Dla mnie to działało, ale kiedy ostatnio aktualizowałem poprzez 'yum update -y', wynik był zawsze pusty. – maddo7

+0

Spróbuj ustawić 'curl_setopt ($ ch, CURLOPT_COOKIELIST, array ('')); z pierwszym żądaniem. To rozwiązało to dla mnie. – maddo7