Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Logowanie poprzez curl, Na localhost działa na dedyku już nie...
KuKa
post
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

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


Hej, mam do napisania skrypt pobierający ceny z pewnej hurtowni.
Muszę się zalogować, przejść na konkretną podstronę i pobrać cenę.
I problem mam taki, że skrypt działa na localhoscie ale po przeniesieniu na serwer dedykowany logowanie już nie działa(przechodzę normalnie na podstrony lecz jestem nie zalogowany).
W czym może być problem?
Na serwerze jest curl i działa logowanie na inne strony.
Próbowałem także logować się korzystając z proxy lecz taka sama historia.

  1. $usecookie = 'cookie.txt';
  2.  
  3. $handle = curl_init();
  4.  
  5. curl_setopt($handle, CURLOPT_URL, "http://jakisurlDoZalogowania.pl");
  6.  
  7. curl_setopt($handle, CURLOPT_HEADER, 1);
  8. curl_setopt($handle, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3");
  9. curl_setopt($handle, CURLOPT_REFERER, "http://jakisurl.pl" );
  10. curl_setopt($handle, CURLOPT_COOKIEJAR, $usecookie);
  11. curl_setopt($handle, CURLOPT_COOKIEFILE, $usecookie);
  12. curl_setopt($handle, CURLOPT_RETURNTRANSFER,1);
  13. curl_setopt($handle, CURLOPT_FOLLOWLOCATION,1);
  14. curl_setopt($handle, CURLOPT_POST,1);
  15. curl_setopt($handle, CURLOPT_POSTFIELDS,"dane do logowania");
  16.  
  17. if($result = curl_exec ($handle)){
  18. curl_setopt($handle, CURLOPT_POST,0);
  19. curl_setopt($handle, CURLOPT_COOKIEJAR, $usecookie);
  20. curl_setopt($handle, CURLOPT_COOKIEFILE, $usecookie);
  21. curl_setopt($handle, CURLOPT_URL, "konkrenty url");
  22. curl_setopt($handle, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3");
  23. curl_setopt($handle, CURLOPT_REFERER, "http://jakisurlDoZalogowania.pl" );
  24. curl_setopt($handle,CURLOPT_RETURNTRANSFER,1);
  25. curl_setopt($handle,CURLOPT_FOLLOWLOCATION,1);
  26.  
  27. $result = curl_exec ($handle);
  28. echo $result;
  29. };


Ten post edytował KuKa 4.11.2011, 10:43:57
Go to the top of the page
+Quote Post
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Sprawdzałeś czy pliki z COOKIE się tworzą?
Go to the top of the page
+Quote Post
KuKa
post
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

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


Tak, tworzą się. Prawa plików są poprawne.
"I zauważyłem że nawet się zaloguję, lecz jak wchodzę na drugi url to już jestem wylogowany." - tylko raz tak udało mi się zalogować, teraz znowu nie mogę :/

Ten post edytował KuKa 4.11.2011, 11:20:03
Go to the top of the page
+Quote Post
Sephirus
post
Post #4





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


czy na serwerze masz ustawiony "OPEN BASEDIR"? Bo spotkałem się z problemem takim, że jak jest włączony to nie działa w CURL'u FOLLOWLOCATION - a może być wymagane przez serwer na który się logujesz?

W razie co możesz łatwo i szybko sprawdzić czy to działa tworząc skrypt w którym dajesz przekierowanie na drugi z jakąś treścią. Zobacz co Ci curl zwróci - treść 1szego czy drugiego skryptu...

Ogólnie kod jest ok - błędów nie widzę zresztą pisałeś, że to działa na localu :/ hmmm...

Ten post edytował Sephirus 4.11.2011, 11:53:40
Go to the top of the page
+Quote Post
KuKa
post
Post #5





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

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


Cytat(Sephirus @ 4.11.2011, 11:51:23 ) *
czy na serwerze masz ustawiony "OPEN BASEDIR"? Bo spotkałem się z problemem takim, że jak jest włączony to nie działa w CURL'u FOLLOWLOCATION - a może być wymagane przez serwer na który się logujesz?

W razie co możesz łatwo i szybko sprawdzić czy to działa tworząc skrypt w którym dajesz przekierowanie na drugi z jakąś treścią. Zobacz co Ci curl zwróci - treść 1szego czy drugiego skryptu...


sprawdziłem i działa z przekierowaniem :/

Jest możliwość aby serwer do którego się próbuje połączyć, blokował takie połączanie z curla?
Bo już nie wiem co jest źle, w czym tkwi problem.
Go to the top of the page
+Quote Post
Sephirus
post
Post #6





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Jest możliwe, że serwer z którego robisz requesta jest zbanowany przez ten, na ktory chcesz się zalogować - ale wtedy objawiało by się to pustym ciągiem zwróconym przez curl'a, lub błędem typu timeout (ewentualnie jakieś 403)...

W tym przypadku nie sądzę by to było to - ale z drugiej strony też nie wiem co to może być :/ Jeżeli ten twój dedyk jest na OVH to mógł by być zbanowany ale tak jak pisałem wyżej...

Masz jeszcze jedną opcję - pośrednią ale warto spróbować:

Czy na tym serwerze, na którym się logujesz możliwe jest zapamiętywanie hasła albo coś takiego? Może ustawiają na stałe jakieś ciasteczko autoryzacji bez związku z sesją (często tak jest) wówczas wystarczyło by wywołać stronę CURL'em z ustawionym tylko takim ciasteczkiem i zobaczyć czy to coś da - ale to już bez podawania COOKIE_FILE i COOKIE_JAR do CURL - tylko zwykłe "CURLOPT_COOKIE" i wartość typu "auth=123456789abcdefghij"

Zobacz może tak się to da obejść.

Sprawdź też co w ogóle siedzi w tym pliku z ciastkami - możesz też spróbować olać w drugim zapytaniu (po zalogowaniu) nadpisywanie tego pliku z ciasteczkami (czyli bez COOKIE_JAR)...

DODATKOWO - w celu debugu możesz porównać nagłówki odpowiedzi uzyskiwane z tego serwera na który się logujesz na localu i dedyku - jak dasz CURLOPT_HEADER na 1 i CURLOPT_NOBODY na 1 to wyrzuci Ci same nagłówki - zobacz czym się różnią - może mają jakieś jeszcze inne zabezpieczenie i trzeba jeszcze coś pododawać do CURL'a - możesz nawet wrzuć kod nagłówków tutaj to zerknę

Ten post edytował Sephirus 4.11.2011, 12:41:53
Go to the top of the page
+Quote Post
KuKa
post
Post #7





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

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


Nie ma możliwości zapamiętania logowania.

Nagłówki z localhosta:
  1. HTTP/1.1 200 OK
  2. Date: Fri, 04 Nov 2011 13:10:56 GMT
  3. Server: Apache/2.2.3 (CentOS)
  4. X-Powered-By: PHP/5.1.6
  5. Set-Cookie: ec_sessid=ce28ca122db38d4f2feb29e26e7a7e16; path=/
  6. Expires: Thu, 19 Nov 1981 08:52:00 GMT
  7. Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
  8. Pragma: no-cache
  9. Connection: close
  10. Transfer-Encoding: chunked
  11. Content-Type: text/html; charset=iso-8859-2

Z serwera:
  1. HTTP/1.1 200 OK
  2. Date: Fri, 04 Nov 2011 13:07:42 GMT
  3. Server: Apache/2.2.3 (CentOS)
  4. X-Powered-By: PHP/5.1.6
  5. Set-Cookie: session_start=1; path=/
  6. Set-Cookie: ec_sessid=29e8fcc915a86abff019e8ba4f422052; path=/
  7. Expires: Thu, 19 Nov 1981 08:52:00 GMT
  8. Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
  9. Pragma: no-cache
  10. Set-Cookie: ip_checked=1
  11. Connection: close
  12. Transfer-Encoding: chunked
  13. Content-Type: text/html; charset=iso-8859-2


Ten post edytował KuKa 4.11.2011, 14:22:37
Go to the top of the page
+Quote Post
Sephirus
post
Post #8





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


  1. HTTP/1.1 200 OK
  2. Date: Fri, 04 Nov 2011 13:07:42 GMT
  3. Server: Apache/2.2.3 (CentOS)
  4. X-Powered-By: PHP/5.1.6
  5.  
  6. // TU COŚ JEST
  7. Set-Cookie: session_start=1; path=/
  8.  
  9. Set-Cookie: ec_sessid=29e8fcc915a86abff019e8ba4f422052; path=/
  10. Expires: Thu, 19 Nov 1981 08:52:00 GMT
  11. Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
  12. Pragma: no-cache
  13.  
  14. // TU COŚ JEST
  15. Set-Cookie: ip_checked=1
  16.  
  17. Connection: close
  18. Transfer-Encoding: chunked
  19. Content-Type: text/html; charset=iso-8859-2


Jak widać coś tu jest... Tylko nie za bardzo wiem o co może tu chodzić :|

Ale ok załóżmy, że to sprawdzimy - jak:

odpal na serwerze skrypt jeszcze raz z nagłówkami żebyś miał identyfikator sesji ( Set-Cookie: ec_sessid=29e8fcc915a86abff019e8ba4f422052; )

Skopiuj go, i odpal skrypt już bez opcji logowania (bezpośrednio do strony) i zamiast COOKIE_FILE i COOKIE_JAR :

'CURLOPT_COOKIE', 'ec_sessid=[to wyciągnięte id]&session_start=1&ip_checked=1'

I zobacz co Ci curl zwróci. Najlepiej zrób tak żeby mieć wszystkie opcje możliwe czyli:

(wszędzie dajesz to id sesji)
1. z session_start bez ip_checked
2. bezz session_start z ip_checked
3. bez jednego i drugiego

I sprawdź czy w którymś przypadku loguje (IMG:style_emoticons/default/wink.gif) jak tak daj znac
Go to the top of the page
+Quote Post
KuKa
post
Post #9





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

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


Nic nie pomaga.

Zrobiłem też tak: zalogowałem się normalnie do hurtowni i połączyłem się curlem wysyłając numer cookisa jaki serwer podał mi podczas logowania i też mi pokazuję że jestem niezalogowany. A normalnie jak poruszając się po stronie jestem zalogowany.
Go to the top of the page
+Quote Post
Sephirus
post
Post #10





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


No to może faktycznie serwer w jakimś stopniu blokuje twojego dedyka...

Ostatnia myśl jaka mi przychodzi do głowy to zabezpieczenie przed multilogowaniem - to znaczy, że może mają systemik, który nie pozwala się zalogować z jakiegoś IP jeżeli jest aktualnie zalogowany ktoś z innego...

hmmm. (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
KuKa
post
Post #11





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

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


Też myślałem o multilogowaniem lecz jakby takie coś mieli, nie mógłbym się zalogować na localhoscie.
Coś pokombinuje jeszcze.

Dzięki za pomoc.
Go to the top of the page
+Quote Post
Fifi209
post
Post #12





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Ścieżkę do plików cookie podaj pełną ;]

możesz spróbować np.
dirname(__FILE__).'/cookie.txt'
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 27.08.2025 - 03:45