Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]CURL - przestał działać
Forum PHP.pl > Forum > Przedszkole
casperii
Panowie przestał mi działać kod, zastanawiam się, czy hosting z którego odpalam php , mógł się "wkurzyć" i coś mi zablokować, bo stwierdzili, że curl zżera im duże zasoby serwera :|

o to kod:

  1. $username = 'user';
  2. $password = 'haslo';
  3.  
  4. $loginUrl = 'adres strony';
  5. $headers = array(
  6. 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16',
  7. 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  8. 'Accept-Language: pl,en-us;q=0.7,en;q=0.3',
  9. 'Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7'
  10. );
  11. $cookie_file = './cookies/cookies.txt';
  12.  
  13. $ch = curl_init();
  14. curl_setopt($ch, CURLOPT_URL, $loginUrl);
  15. curl_setopt($ch, CURLOPT_HEADER, true);
  16. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
  17. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
  18. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  19. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  20. curl_setopt($ch, CURLOPT_POST, true);
  21. curl_setopt($ch, CURLOPT_POSTFIELDS, 'username='.$username.'&password='.$password);
  22. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  23.  
  24. echo curl_exec($ch);


powyższe pokazuje pustą stronę, bezpośredni link działa.

jak zakomentuje:

  1. curl_setopt($ch, CURLOPT_POST, true);
  2. curl_setopt($ch, CURLOPT_POSTFIELDS, 'username='.$username.'&password='.$password);


to wyświetla formularz logowania.
nospor
Tyle czasu na forum to juz moglbys ogarniac ze "przestal dzialac" to z reguly nam nic nie mowi.
CIezko napisac jak dzialal wczesniej a jak dziala teraz? Co sie dzialo wczesniej a co sie dzieje teraz?

Z twojego haotycznego opisu na chwile obecna wnioskuje, ze stronka na ktora wysylasz dane, cos zmienila u siebie i w momencie gdy wyslesz poprawne dane formularza to ona przekierowuje gdzies indziej i temu teraz nie widzisz juz formularza bo przeciez dane wyslales.
casperii
@nospor strona nic nie zmieniła, podałem wyżej kod jak wyglądał wcześniej , który działał.

Metodą prób i błędów doszedłem do czegoś takiego:

  1. $username = 'user';
  2. $password = 'haslo';
  3.  
  4. $loginUrl = 'adres strony';
  5. $headers = array(
  6. 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16',
  7. 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  8. 'Accept-Language: pl,en-us;q=0.7,en;q=0.3',
  9. 'Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7'
  10. );
  11. $cookie_file = './cookies/cookies.txt';
  12.  
  13. $ch = curl_init();
  14. curl_setopt($ch, CURLOPT_URL, $loginUrl);
  15. curl_setopt($ch, CURLOPT_HEADER, true);
  16. curl_setopt($ch, CURLOPT_POST, true);
  17. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  18. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  19. //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  20. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
  21. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
  22. curl_setopt($ch, CURLOPT_POSTFIELDS, 'username='.$username.'&password='.$password);
  23.  
  24. $store = curl_exec($ch);
  25. echo $store;


wyświetla mi:

HTTP/1.1 302 Found Date: Sat, 22 Jul 2017 11:38:33 GMT Server: Apache Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Status: 302 Location: https://adresstrony.pl/token=5cf15dw751e5a2f97022b7b7f99ead Content-Length: 0 Content-Type: text/html; charset=UTF-8

Natomiast odkomentowanie
  1. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

zwraca mi pustą stronę. Dziwne to , że printowanie pokazało Location https , skoro ja podałem w urlu http. Chociaż logować się można przez http i https.
nospor
Na stronie masz przekierowanie z http na https.
Jesli to nie ty jestes autorem strony na ktore robisz curl, to nie jestes wstanie stwierdzic czy cos zmienili czy nie tongue.gif
casperii
Problem rozwiązany, wystarczyło dodać.:

  1. curl_setopt($ch, CURLOPT_AUTOREFERER, true);
  2. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120);
  3. curl_setopt($ch, CURLOPT_TIMEOUT, 120);
  4. curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
  5. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
  6. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);


@nospor a czy CURL jest mocno obciążający serwer?
Na chwilę obecną pobieram w pętli 20 podstron co 10 minut.
Czy jest jakaś komenda zwalniająca zasoby serwera po wykonanym curlu ? coś w stylu disconnect ?
Neutral
Chodzi ci o: curl_close, curl_pause, curl_reset?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.