Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Nie można przekazać zmiennej?
Nagareteku
post 17.01.2014, 14:02:26
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 6.01.2014

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


To dopełnienie tego tematu.

Zachodziłem w głowę, co sprawia, że nie mogę się zalogować i odkryłem problem. Ale za nic nie mogę odnaleźć rozwiązania.

Taki kod pozwala mi się logować bez problemu:

  1. $curl = curl_init();
  2. curl_setopt($curl, CURLOPT_URL, "http://strona.com/login.html");
  3. curl_setopt($curl, CURLOPT_HEADER, 1);
  4. curl_setopt($curl, CURLOPT_POST, 1);
  5. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
  6. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  7. curl_setopt($curl, CURLOPT_COOKIESESSION, true);
  8. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false );
  9. curl_setopt($curl, CURLOPT_POSTFIELDS, "login=login&password=haslo");
  10. curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
  11. curl_setopt($curl, CURLOPT_COOKIEJAR, $_SERVER["DOCUMENT_ROOT"].'/panel/cookies/cookie.txt');
  12. curl_setopt($curl, CURLOPT_COOKIEFILE, $_SERVER["DOCUMENT_ROOT"].'/panel/cookies/cookie.txt');
  13. return curl_exec($curl);


ale już taki kod nie pozwala - strona zwraca komunikat, że cookies nie są włączone.

  1. $cookiefile = "cookie";
  2. $curl = curl_init();
  3. curl_setopt($curl, CURLOPT_URL, "http://strona.com/login.html");
  4. curl_setopt($curl, CURLOPT_HEADER, 1);
  5. curl_setopt($curl, CURLOPT_POST, 1);
  6. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
  7. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  8. curl_setopt($curl, CURLOPT_COOKIESESSION, true);
  9. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false );
  10. curl_setopt($curl, CURLOPT_POSTFIELDS, "login=login&password=haslo");
  11. curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
  12. curl_setopt($curl, CURLOPT_COOKIEJAR, $_SERVER["DOCUMENT_ROOT"].'/panel/cookies/'.$cookiefile.'.txt');
  13. curl_setopt($curl, CURLOPT_COOKIEFILE, $_SERVER["DOCUMENT_ROOT"].'/panel/cookies/'.$cookiefile.'.txt');
  14. return curl_exec($curl);


Ja potrzebuję by to działało w drugiej wersji, ale skoro cURL mi takie coś odrzuca to... co mam zrobić?
Dodam, że plik cookie.txt istnieje i w obu wersjach ciasteczko zapisuje się i można je odczytać. Ale nie działa. Bo nie.

Ja nie rozumiem, jak miałbym to rozwiązać.

Z góry dzięki za pomoc!

Ten post edytował Nagareteku 17.01.2014, 14:13:39
Go to the top of the page
+Quote Post
lukasz1985
post 17.01.2014, 15:52:58
Post #2





Grupa: Zarejestrowani
Postów: 205
Pomógł: 43
Dołączył: 5.03.2012

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


Haha, niezłe cookie smile.gif no ciekawe..


A sprawdziłeś może czy w pliku, poza kodem PHP nie masz białych znaków (przed <?php i po ?>) ?

Ten post edytował lukasz1985 17.01.2014, 15:59:51
Go to the top of the page
+Quote Post
Nagareteku
post 17.01.2014, 16:05:02
Post #3





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 6.01.2014

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


Sprawdzałem, wszystko jest czyste :x
Go to the top of the page
+Quote Post
-Gość-
post 17.01.2014, 16:18:31
Post #4





Goście







Cytat(Nagareteku @ 17.01.2014, 16:05:02 ) *
Sprawdzałem, wszystko jest czyste :x

Sprawdzałeś BOM?
Go to the top of the page
+Quote Post
Nagareteku
post 17.01.2014, 16:29:50
Post #5





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 6.01.2014

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


Tak, w końcu używam Notepada++, chociaż nie wiem, co to ma do rzeczy, skoro te dwa kody operują na tym samym pliku, dwa te kody zapisują dobrze, ale ten drugi jakoś działa tak, że z podaną zmienną, ciasteczka są "wyłączone".
Go to the top of the page
+Quote Post
sowiq
post 17.01.2014, 16:39:35
Post #6





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


Cytat(Nagareteku @ 17.01.2014, 16:29:50 ) *
ale ten drugi jakoś działa tak, że z podaną zmienną, ciasteczka są "wyłączone".

Nie ma takiej opcji. Te dwa kody są równoważne, a problem musi leżeć gdzie indziej.

Dla testu wykonaj poniższy scenariusz:
1. var_dump( $_SERVER["DOCUMENT_ROOT"] . '/panel/cookies/cookie.txt' );
2. Utwórz pusty plik z lokalizacją jak w 1.
3. Wykonaj pierwszą wersję skryptu kilka razy
4. Wykonaj 1. i 2., a w 3. punkcie uruchamiaj drugą wersję skryptu.

[edit]
Aha, jeszcze jedno, chyba najważniejsze. Kiedy używasz pliku COOKIEJAR, musisz wykonać curl_close, żeby wyzwolić zapis ciastek.

http://php.net/manual/en/function.curl-setopt.php

Cytat
CURLOPT_COOKIEJAR
The name of a file to save all internal cookies to when the handle is closed, e.g. after a call to curl_close.


Ten post edytował sowiq 17.01.2014, 16:40:09
Go to the top of the page
+Quote Post
Nagareteku
post 17.01.2014, 17:02:13
Post #7





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 6.01.2014

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


@sowiq

Nawet nie muszę robić tego dla drugiego scenariusza.

Dla pierwszego scenariusza to wygląda tak:

1. Tworzę plik dla ciasteczka.
2. Uruchamiam logowanie.
3. Błąd - "cookies are not enabled"
4. Wciskam F5, nie usuwam pliku ciasteczka.
5. Logowanie działa.

Zrobiłem też wersje bez tworzenia pliku manualnie: daję go utworzyć cURLowi.
1. Uruchamiam logowanie.
2. Błąd - "cookies are not enabled", ale plik jest utworzony, ciasteczko zapisane
3. Wciskam F5, nie usuwam pliku ciasteczka.
5. Logowanie działa.

Tego to ja już w ogóle nie rozumiem.


#edit

1. zrobiłem jednak wersję dla drugiego scenariusza (ze zmienną) - to samo
2. var_dump dla każdego scenariusza wygląda tak samo, po każdym uruchomieniu:

  1. string(36) "D:/WebServ/httpd//panel/cookies/cookie.txt"


Ten post edytował Nagareteku 17.01.2014, 17:06:20
Go to the top of the page
+Quote Post
sowiq
post 17.01.2014, 17:24:54
Post #8





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


Niektóre strony sprawdzają, czy masz włączoną obsługę cookies. W tym celu za pierwszym razem (kiedy jeszcze ciastko nie jest dostępne do odczytu) odświeżają stronę. Widocznie ta Twoja robi to inaczej niż za pomocą nagłówka HTTP. Po prostu cURL nie rozumie tego przekierowania i za pierwszym razem po prostu pokazuje Ci komunikat. Za drugim razem, kiedy ciastko już jest w pliku i zostanie wysłane na serwer, wszystko jest OK.

Rozwiązanie jest proste. Przed zalogowaniem zrób jednego dodatkowego requesta tylko po to, żeby utworzyło Ci ciastko smile.gif

Ten post edytował sowiq 17.01.2014, 17:25:31
Go to the top of the page
+Quote Post
Nagareteku
post 17.01.2014, 18:23:15
Post #9





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 6.01.2014

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


Podziałało, ale tylko pod warunkiem, że pobieranie ciasteczka i logowanie będzie odbywało się w dwóch różnych modułach, nie mogły następować po sobie.

Dzięki wielkie, masz u mnie piwo! : )
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 Wersja Lo-Fi Aktualny czas: 28.04.2024 - 03:35