Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> curl wysyła tylko pierwsze ciasteczko dlaczego?
kubek15
post 24.03.2010, 18:24:48
Post #1





Grupa: Zarejestrowani
Postów: 278
Pomógł: 3
Dołączył: 28.06.2008
Skąd: PL

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


witam
zrobiłem logowanie na serwer i potrzebje id sesji i nr id sesji sie przsyła a nr nie plik z ciastkami wygląda tak
Kod
# Netscape HTTP Cookie File
# http://curlm.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.

strona.pl    FALSE    /    FALSE    0    PHPSESSID    1bccacc0ffa0fe8a3123c5dd3f131640
strona.pl    FALSE    /    FALSE    0    wunr    14312222


sesja jest bo sprawdzałem w ciastkach po odpaleni tego skryptu, ale nr niema co jest nie tak? próbowałem juz chyba wszystkiego.


pomoże ktoś, bo szukałem już na forum i na googl'u itp i nic nie wiem dlaczego wsyłane jest tylko pierwsze


--------------------
Go to the top of the page
+Quote Post
vokiel
post 24.03.2010, 20:25:36
Post #2





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


A pokaż tego cURL'a jak to robisz, opisz dokładniej algorytm postępowania, błędy co i jak, bo teraz to ciężko coś z tego wywnioskować.


--------------------
Go to the top of the page
+Quote Post
kubek15
post 24.03.2010, 21:21:15
Post #3





Grupa: Zarejestrowani
Postów: 278
Pomógł: 3
Dołączył: 28.06.2008
Skąd: PL

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


ogólnie to mam tak sprawdzałem najpierw co wysyła za pomocą live http headrea

i ja mam tak:
  1. $cookie = dirname(__FILE__) .'/cookie';
  2. $ch = curl_init("http://mojastrona.pl/login/proxy_login.php");
  3. curl_setopt($ch, CURLOPT_HEADER, true);
  4. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  5. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie );
  6. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie );
  7. curl_setopt($ch, CURLOPT_COOKIE, $cookie);
  8. curl_setopt($ch, CURLOPT_POST, 1);
  9. curl_setopt($ch, CURLOPT_POSTFIELDS, 'username=kubek&password=kubek&submitlogin=Zaloguj');
  10. curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 );
  11. $url = "http://mojastrona.pl/logw.php?USR=kubek&pass=jakiespasszakodowanemd5";
  12. curl_setopt($ch, CURLOPT_URL, $url);
  13. $url2 = "http://mojastrona.pl/main.php";
  14. curl_setopt($ch, CURLOPT_URL, $url2);
  15. $pok = curl_exec($ch);
  16. curl_close($ch);
  17. echo $pok;


no i jak wejde na stronę mojastrona to che zobaczyć jakie sa ciastka i sa tylko id sesji a drugiego nr nie ma


--------------------
Go to the top of the page
+Quote Post
vokiel
post 24.03.2010, 21:34:20
Post #4





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Tak sobie patrzę na ten kod i kilku rzeczy nie rozumiem. Po co robisz POST, skoro później przechodzisz na link podając to samo w GET a tego wcześniejszego nie wywołujesz, bo curl_exec masz dopiero na końcu.

Trzeba by ustawić dane do przesłania POST'em, adres, następnie curl_exec, dopiero potem przejść na stronę main, i tam zobaczyć co się wydarzyło.

Do tego mogą się przydać funkcje, które pokażą błędy, albo nawet sobie zrobić zrzut zwróconych nagłówków (curl_getinfo).


--------------------
Go to the top of the page
+Quote Post
kubek15
post 24.03.2010, 21:57:37
Post #5





Grupa: Zarejestrowani
Postów: 278
Pomógł: 3
Dołączył: 28.06.2008
Skąd: PL

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


Mam tak ale dalej mi to nic nie zmienia. A $info zwraca array. Powinienem zrezygnowac z post? i dac tylko od drugiego linku?

obecnie mam tak
  1. $cookie = dirname(__FILE__) .'/cookie';
  2. $ch = curl_init("http://mojastrona.pl/login/proxy_login.php");
  3. curl_setopt($ch, CURLOPT_HEADER, true);
  4. curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; pl; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3');
  5. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  6. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie );
  7. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie );
  8. curl_setopt($ch, CURLOPT_COOKIE, $cookie);
  9. curl_setopt($ch, CURLOPT_POST, 1);
  10. curl_setopt($ch, CURLOPT_POSTFIELDS, 'username=kubek&password=kubek&submitlogin=Zaloguj');
  11. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1 );
  12. $url = "http://mojastrona.pl/logw.php?USR=kubek&pass=haslowmd5";
  13. curl_setopt($ch, CURLOPT_URL, $url);
  14. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie );
  15. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie );
  16. curl_setopt($ch, CURLOPT_COOKIE, $cookie);
  17. curl_exec($ch);
  18. $url2 = "http://mojastrona.pl/main.php";
  19. curl_setopt($ch, CURLOPT_URL, $url2);
  20. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie );
  21. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie );
  22. curl_setopt($ch, CURLOPT_COOKIE, $cookie);
  23. $info = curl_getinfo($ch);
  24. $pok = curl_exec($ch);
  25.  
  26. curl_close($ch);
  27. echo $pok;


--------------------
Go to the top of the page
+Quote Post
vokiel
post 25.03.2010, 07:52:01
Post #6





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Tak o zrezygnować z POST nie powinieneś jeśli nie wiesz czy jest potrzebne. Przede wszystkim musisz prześledzić kolejność działań na stronie. cURL jest imitacją przeglądarki, może wejść na stronę wysłać formularz, przejść na inną podstronę. Musisz wiedzieć dokładnie co po czym ma następować.

Przykładowo, jeśli masz tą stronę http://mojastrona.pl/login/proxy_login.php, na niej formularz, w którego pola wpisujesz login i hasło, to używasz tego POST'a. Jeśli natomiast podawanie loginu masz w http://mojastrona.pl/logw.php?USR=kubek&pass=haslowmd5 to ten POST wydaje się niepotrzebny. Trudno wymyślać co gdzie powinno być jeśli się nie wie jaka to strona winksmiley.jpg

Może formularz logowania powinieneś wypełnić na http://mojastrona.pl/login.php?start=1&ref=&wid=, tam podać dane takie jak login i hasło, wysłać POST'em.

Kolejność działania w skrócie jest taka:
1. Inicjujesz cURL'a - $ch = curl_init();
2. Ustawiasz opcje (zwracanie nagłówków, treści, ciasteczka, etc)
3. Ustawiasz adres url pod który skrypt ma przejść i wykonujesz te przejście $wynik = curl_exec();
4. Jeśli jest formularz, to ustawiasz dane POST i tak samo przechodzisz przy pomocy curl_exec.

Teraz, po każdym takim przejściu możesz zobaczyć jaki wynik powstał, robiąc zwykłe print_r($wynik). Widzisz wtedy co za strona została pobrana. Po tym możesz diagnozować co się zdarzyło, czy logowanie udane, czy nie, czy poprawna strona, bo może otrzymałeś błąd 401.
Do samych nagłówków tak jak pisałem wcześniej, skoro $info zwróciło Ci array, to zrób print_r($info) a nie echo $info, to zobaczysz wszystkie nagłówki.

Odnośnie Twojego kodu ustawienia curl_setopt robisz raz, nie ustawiasz ciasteczek po każdym wykonaniu. Bo to są ustawienia dla danej 'sesji' cURL'a, więc są już ustawione dopóki nie usuniesz $ch.


--------------------
Go to the top of the page
+Quote Post
kubek15
post 27.03.2010, 11:23:21
Post #7





Grupa: Zarejestrowani
Postów: 278
Pomógł: 3
Dołączył: 28.06.2008
Skąd: PL

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


Już to rozwiązałem innym sposobem. Dzięki za odpowiedzi.

Ten post edytował kubek15 27.03.2010, 17:57:07


--------------------
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: 17.06.2025 - 14:19