Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]cURL pobieranie sesji ze strony
Watt
post
Post #1





Grupa: Zarejestrowani
Postów: 372
Pomógł: 1
Dołączył: 13.06.2008

Ostrzeżenie: (0%)
-----


Cześć,

Mam duży problem z poberaniem sesji przez curl. Mam 2 requesty pierwszy zbiera sesję, drugi wykonuje zapytanie w post (który wymaga sesji).

Problem w tym, że ten pierwszy nie pobiera mi poprawnie sesji. Gdy odpalam stronę przez curl, w headerze strony wyrzuca mi atrybut np."Set-Cookie: JSESSIONID=07tP-hXzHurc-bL9bpOvVzmK; Path=/; HttpOnly", później gdy wrzucam go jako sesję w drugim curlu to strona wyrzuca mi "<partial-response>". Po każdym odświeżeniu strony JSESSIONID zmienia wartość.

W momencie jednak, gdy kopiuje sesję z przeglądarki wszysko śmiga. Starałem się dopisywać atrybuty jak leci i dalej nic. Jak sprawić, żeby strona poprawnie utworzyła sesję?

Pierwszy curl wyglada tak:

Kod
$chh = curlinit();
curlsetopt($chh, CURLOPT_URL, $strona);

curl_setopt($chh, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($chh, CURLOPT_COOKIEJAR, $tmpfname);
curl_setopt($chh, CURLOPT_COOKIEFILE, $tmpfname);
curl_setopt($chh, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($chh, CURLOPT_SSL_VERIFYPEER, false);


curl_setopt($chh, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($chh, CURLOPT_VERBOSE, 1);
curl_setopt($chh, CURLOPT_COOKIESESSION, 1);
curl_setopt($chh, CURLOPT_HEADER, 1);

$header_size = curl_getinfo($chh, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);

$exp = explode("Set-Cookie:", $header);
$sesja = explode("; Path=/; HttpOnly", $exp[1]);


Dodam jeszcze, że strona w firefoxie wyrzuca mi np:

Kod
Cookie: __utma=179393144.1468963194.1462999507.1462999507.1462999507.1; _ga=GA1.3.1468963194.1462999507; JSESSIONID=UhpC5Rq4mETGZxq4wPXBgAJf


Natomiast tak jak wyżej, w curlu ten atrubut to nie Cookie: tylko Set-Cookie:

Ten post edytował Watt 9.02.2017, 21:38:58
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
markuz
post
Post #2





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


Obsługa sesji to po prostu obsługa cookies, to się robi automatycznie przez opcje:
  1. curl_setopt ($ch, CURLOPT_COOKIEJAR, 'jakisplik');
  2. curl_setopt ($ch, CURLOPT_COOKIEFILE, 'jakisinnyplik');

Pomijajac fakt, że masz blędnie nazwane stałe - nie potrzebne Ci $exp, $sesja itd.
Po prostu zarówno w 1 requeście (gdzie otrzymujesz id sesji w cookies) jak i 2 korzystasz z tych samych plików (w nich zapisuje się np. id sesji).


--------------------
Go to the top of the page
+Quote Post
Watt
post
Post #3





Grupa: Zarejestrowani
Postów: 372
Pomógł: 1
Dołączył: 13.06.2008

Ostrzeżenie: (0%)
-----


Cytat
Pomijajac fakt, że masz blędnie nazwane stałe - nie potrzebne Ci $exp, $sesja itd.

Tak tak wybacz coś się źle skopiowało tongue.gif

Po prostu zarówno w 1 requeście (gdzie otrzymujesz id sesji w cookies) jak i 2 korzystasz z tych samych plików (w nich zapisuje się np. id sesji).

Kod
$tmpfname = "cookie.txt";

$chh = curl_init();
curl_setopt($chh, CURLOPT_URL, $strona);

curl_setopt($chh, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($chh, CURLOPT_COOKIEJAR, $tmpfname);


curl_setopt($chh, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($chh, CURLOPT_VERBOSE, 1);
curl_setopt($chh, CURLOPT_COOKIESESSION, 1);
curl_setopt($chh, CURLOPT_HEADER, 1);
$response = curl_exec($chh);


Problem w tym, że plik cookies.txt pozostaje pusty. Czy ma to związek z tym, że strona zwraca parametr "Set-Cookie: ", a nie "Cookie:"?

Ten post edytował Watt 9.02.2017, 21:50:57
Go to the top of the page
+Quote Post
markuz
post
Post #4





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


CURLOPT_COOKIEJAR i CURLOPT_COOKIEFILE to chyba powinny być 2 pliki, a Ty podajesz im 1 ścieżkę (pewnie jeden nadpisuje drugi, o ile ścieżka jest poprawna).

Sprawdź czy takie coś Ci się zapisze do pliku:
file_put_contents($tmpfname, 'abc');
Jeżeli nie to popraw ścieżke.


--------------------
Go to the top of the page
+Quote Post
Watt
post
Post #5





Grupa: Zarejestrowani
Postów: 372
Pomógł: 1
Dołączył: 13.06.2008

Ostrzeżenie: (0%)
-----


Kod
$tmpfname = "cookie.txt";
$tmpfname2 = "cookie2.txt";
file_put_contents($tmpfname, 'abc');
$chh = curl_init();
curl_setopt($chh, CURLOPT_URL,$strona);

curl_setopt($chh, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($chh, CURLOPT_COOKIEJAR, $tmpfname);
curl_setopt($chh, CURLOPT_COOKIEFILE, $tmpfname2);
curl_setopt($chh, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($chh, CURLOPT_SSL_VERIFYPEER, false);


curl_setopt($chh, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($chh, CURLOPT_VERBOSE, 1);
curl_setopt($chh, CURLOPT_COOKIESESSION, 1);
curl_setopt($chh, CURLOPT_HEADER, 1);

// ...
$response = curl_exec($chh);


Niestety dodało tylko abc do pliku cookie.txt i nic poza tym. Czy problem leży w samym zapytaniu? Nie powinno pobierać choć ciastek od google analitics?

Ten post edytował Watt 9.02.2017, 21:57:22
Go to the top of the page
+Quote Post
markuz
post
Post #6





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


Od google analytics na pewno nie bo to javascript dodaje te ciastka.

Masz też ustawione: curl_setopt($chh, CURLOPT_COOKIESESSION, 1); co jest chyba błędem w Twoim przypadku:
Cytat
Pass a long set to 1 to mark this as a new cookie "session". It will force libcurl to ignore all cookies it is about to load that are "session cookies" from the previous session. By default, libcurl always stores and loads all cookies, independent if they are session cookies or not. Session cookies are cookies without expiry date and they are meant to be alive and existing for this "session" only.


--------------------
Go to the top of the page
+Quote Post
Watt
post
Post #7





Grupa: Zarejestrowani
Postów: 372
Pomógł: 1
Dołączył: 13.06.2008

Ostrzeżenie: (0%)
-----


Kod
$tmpfname = "cookie.txt";
$tmpfname2 = "cookie2.txt";

$chh = curl_init();
$useragent = 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0';

curl_setopt($chh, CURLOPT_USERAGENT, $useragent);
curl_setopt($chh, CURLOPT_URL, $strona);

curl_setopt($chh, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($chh, CURLOPT_COOKIEJAR, $tmpfname);
curl_setopt($chh, CURLOPT_COOKIEFILE, $tmpfname2);

curl_setopt($chh, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($chh, CURLOPT_RETURNTRANSFER, true);

// ...
$response = curl_exec($chh);


Spróbowałem uprościć i dalej nic. No cóż, pomęcze się z tym jeszcze. Dziękuje Ci bardzo za pomoc.



Ten post edytował Watt 9.02.2017, 22:29:40
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 22:34