![]() |
![]() |
![]()
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 |
|
|
![]() |
![]()
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:
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). -------------------- |
|
|
![]()
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 ![]() 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 |
|
|
![]()
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. -------------------- |
|
|
![]()
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 |
|
|
![]()
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.
-------------------- |
|
|
![]()
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 22:34 |