Witam,

Chcę zalogowac się na stronę, a przy logowaniu przeglądarka z formularza wysyła taki ciąg POSTem:

  1. $string = "$name=$value&akcja=logowanie&logowanie=true&login=$login&haslo=$password"


Zmienne $login i $password są wiadome - login i hasło, definiowane.

Problem w tym, że zmienne $name oraz $value są dynamiczne i w formularzu występują np. tak:

  1. <input type="hidden" name="2ab8fe0bcc542898842f16fb61a72abe" value="90eab5cbb6183407d41a6cec4a379789">


I teraz pojawia się problem - gdyby nie było tej dynamicznej wartości, stronę pobrałbym za pomocą 2 prostych funkcji, które chyba zna każdy kto z Curl'em miał do czynienia - i ten poniższy kod wystarcza w zupełności na innych stronach bez takich ceregieli:

  1.  
  2. function curl_login($url,$data,$proxy,$proxystatus){
  3. $fp = fopen("cookie.txt", "w");
  4. fclose($fp);
  5. $login = curl_init();
  6. curl_setopt($login, CURLOPT_COOKIEJAR, "cookie.txt");
  7. curl_setopt($login, CURLOPT_COOKIEFILE, "cookie.txt");
  8. curl_setopt($login, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
  9. curl_setopt($login, CURLOPT_TIMEOUT, 40);
  10. curl_setopt($login, CURLOPT_RETURNTRANSFER, TRUE);
  11. if ($proxystatus == 'on') {
  12. curl_setopt($login, CURLOPT_SSL_VERIFYHOST, FALSE);
  13. curl_setopt($login, CURLOPT_HTTPPROXYTUNNEL, TRUE);
  14. curl_setopt($login, CURLOPT_PROXY, $proxy);
  15. }
  16. curl_setopt($login, CURLOPT_URL, $url);
  17. curl_setopt($login, CURLOPT_HEADER, TRUE);
  18. curl_setopt($login, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
  19. //curl_setopt($login, CURLOPT_FOLLOWLOCATION, TRUE);
  20. curl_setopt($login, CURLOPT_POST, TRUE);
  21. curl_setopt($login, CURLOPT_POSTFIELDS, $data);
  22. ob_start(); // prevent any output
  23. return curl_exec ($login); // execute the curl command
  24. ob_end_clean(); // stop preventing output
  25. curl_close ($login);
  26. unset($login);
  27. }
  28.  
  29. function curl_grab_page($site,$proxy,$proxystatus){
  30. $ch = curl_init();
  31. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  32. if ($proxystatus == 'on') {
  33. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  34. curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);
  35. curl_setopt($ch, CURLOPT_PROXY, $proxy);
  36. }
  37. curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
  38. curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
  39. curl_setopt($ch, CURLOPT_URL, $site);
  40. ob_start(); // prevent any output
  41. return curl_exec ($ch); // execute the curl command
  42. ob_end_clean(); // stop preventing output
  43. curl_close ($ch);
  44. }
  45.  
  46.  


Jednak jak utrzymac sesję w momencie, kiedy chcąc np. pobrac wartość $name i $value za pomoca wyrażen regularnych z kodu strony, ponowne połaczenie (nowe curl_init()) pownownie wchodzi na stronę, a w tym momencie zmienne $name i $value mają już nowe, losowo wygenerowane wartości.

Macie jakieś pomysły? Absolutnie nie licze na gotowca, chciałbym poprosić Was o możliwe najlepsze nakierowanie mnie na rozwiązanie tego problemu. 

Z góry dziękuję wszystkim, którzy postarają się pomóc.

Pozdrawiam,

Łukasz