Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problemu z cURL'em i ssl ;/
Forum PHP.pl > Forum > PHP
weloo
Witam!

Mam skrypt który ma sie logować na strone, i pobierać z niej dane.
Działał dobrze jak nie było logowania przez https, no ale niestety teraz jest i skrypt padł ;(
Nie wiecie co może być przyczyną?

Poniżej przesyłam kod:

Kod
<?

    $user='xxx';
    $haslo='xxx';
    $config_explorer="Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8) Gecko/20051111 Firefox/1.5";
    
    
    $ch = curl_init();
    $file_tmp=md5(rand());    

$a=fopen("tmp/$file_tmp", "w");
fclose($a);

    curl_setopt($ch, CURLOPT_URL, 'https://serwer/Login.aspx');
    curl_setopt($ch, CURLOPT_COOKIEJAR, "tmp/$file_tmp");
    curl_setopt($ch, CURLOPT_TIMEOUT, 15);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, $config_explorer);
    $string_tmp=curl_exec ($ch);
if (curl_errno($ch)) {
    echo 'Błąd #' . curl_errno($ch) . ': ' . curl_error($ch);
}
    curl_close ($ch);

preg_match_all("|<input type=\"hidden\" name=\"__VIEWSTATE\" id=\"__VIEWSTATE\" value=\"(.*)\" \/>|U", $string_tmp, $jeden);
$viewstate=$jeden[1][0];


preg_match_all("|<input type=\"hidden\" name=\"__EVENTVALIDATION\" id=\"__EVENTVALIDATION\" value=\"(.*)\" \/>|U", $string_tmp, $dwa);
$eventvalidation=$dwa[1][0];


/*


// Pobieranie identyfikatora sesji ASP.NET


$plik="./tmp/$file_tmp";

$open = @fopen ($plik, "r+");
$dane = fread($open, filesize($plik));

preg_match_all("|ASP.NET_SessionId(.*)
|U", $dane, $sid);
$sesja=$sid[1][0];
$sesja=substr($sesja,0,24);
// Koniec pobierania identyfikatora sesji

*/






    $ch = curl_init ();
    $file_tmp_1=md5(rand());
    

    $post_pytanie="Form1=&__VIEWSTATE=$viewstate&txtCustomerID=&txtLogin=$user&txtPassword=$haslo&ButtonLogIn=Wyślij&__EVENTVALIDATION=$eventvalidation";
    
    curl_setopt($ch, CURLOPT_URL, 'https://serwer/Login.aspx');
    curl_setopt($ch, CURLOPT_COOKIEFILE, "tmp/$file_tmp");
    curl_setopt($ch, CURLOPT_COOKIEJAR, "abc");
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 15);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_REFERER, "https://serwer/Login.aspx");
    curl_setopt($ch, CURLOPT_POST, 1);     
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_pytanie);
    curl_setopt($ch, CURLOPT_USERAGENT, $config_explorer);
if (curl_errno($ch)) {
    echo 'Błąd #' . curl_errno($ch) . ': ' . curl_error($ch);
}

curl_errno($ch);

    $string_tmp=curl_exec ($ch);
    curl_close ($ch);        
    
        $ch = curl_init ();

    curl_setopt($ch, CURLOPT_URL, "http://serwer/menuLeft.aspx");
    curl_setopt($ch, CURLOPT_COOKIEFILE, "abc");
    curl_setopt($ch, CURLOPT_TIMEOUT, 15);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_USERAGENT, $config_explorer);
if (curl_errno($ch)) {
    echo 'Błąd #' . curl_errno($ch) . ': ' . curl_error($ch);
}

    echo $string_tmp=curl_exec ($ch);
    curl_close ($ch);    
    
    unlink("tmp/$file_tmp");

?>


Skrypt po odpaleniu pokazuje:
Object moved to here.

Czyli tak jakby nie zapisywał cookies ;(

Z góry dzięki!
Pozdr
WeLoO
dedi2
Witam!

Mam podobny problem z logowaniem się do tego serwisu! Coś zaszalało zaraz po nowym roku. U mnie jeden na dziesięć razy zadziała. Jedna kwestia która mnie zastanawia to może jakieś problemy ze strony providera. Ja uruchamiałem na serwerach NetArt i nie mam niestety możliwości przetestowania na innym serwerze.

Pozdrawiam
gumbas
Object moved to here - prawdopodobnie masz problem z przechwyceniem sesji i dalatego sie pojawia ten komunikat.

A wie ktoś może jak sie zautoryzować po https wykorzystując curla??
L00zak
  1. <?
  2. //error_reporting(0);
  3.  
  4. $i=0;
  5. $url1 = 'https://serwer/Login.aspx';
  6. $url2 = 'https://serwer/Product.aspx';
  7. $client_idek='numer_id';
  8. $client_user='login';
  9. $client_pass='hasło';
  10.  
  11. for ($i = 1; $i <= 2; $i++) {
  12. $ch = curl_init();
  13. curl_setopt($ch, CURLOPT_URL, $url1);
  14. curl_setopt($ch, CURLOPT_COOKIEFILE, '/path1/cookies.txt');
  15. curl_setopt($ch, CURLOPT_COOKIEJAR, '/path1/cookies.txt');
  16. curl_setopt($ch, CURLOPT_TIMEOUT, 15);
  17. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  18. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
  19. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  20. curl_setopt($ch, CURLOPT_USERAGENT, $explorer);
  21. $string_tmp=curl_exec ($ch);
  22. //if (curl_errno($ch)) {
  23. // echo 'Błąd #' . curl_errno($ch) . ': ' . curl_error($ch);
  24. //}
  25. curl_close ($ch);
  26.  
  27. if($i <= 2){
  28. preg_match_all("|<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="(.*)" />|U", $string_tmp, $jeden);
  29. preg_match_all("|<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="(.*)" />|U", $string_tmp, $dwa);
  30. }
  31.  
  32. }
  33.  
  34. $post = '__VIEWSTATE='.urlencode($viewstate=$jeden[1][0]).'&txtCustomerID='.$client_idek.'&txtLogin='.$client_user.'&txtPassword='.$client_pass.'&ButtonLogIn=Wy%C5%9Blij&__EVENTVALIDATION='.urlencode($eventvalidation=$dwa[1][0]).'';
  35. $ch = curl_init();
  36. curl_setopt($ch, CURLOPT_URL, $url);
  37. curl_setopt($ch, CURLOPT_COOKIEFILE, '/path2/cookies.txt');
  38. curl_setopt($ch, CURLOPT_COOKIEJAR, '/path2/cookies.txt');
  39. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  40. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
  41. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  42. curl_setopt($ch, CURLOPT_TIMEOUT, 15);
  43. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  44. curl_setopt($ch, CURLOPT_REFERER, $url);
  45. curl_setopt($ch, CURLOPT_POST, 1);
  46. curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
  47. curl_setopt($ch, CURLOPT_USERAGENT, $explorer);
  48. $result = curl_exec ($ch);
  49. //if (curl_errno($ch)) {
  50. // echo 'Błąd #' . curl_errno($ch) . ': ' . curl_error($ch);
  51. //}
  52. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  53. $store = curl_exec ($ch);
  54. curl_setopt($ch, CURLOPT_URL, $url2);
  55. $content = curl_exec ($ch);
  56. curl_close ($ch);
  57. ?>


wersja poprawiona smile.gif
-wywaliłem Pobieranie identyfikatora sesji ASP.NET bo i tak zapisuje się w ciastku
-zmiana sposobu zapisywania ciastek (jedno nieruszane ciastko starcza przynajmniej na jeden dzień)
-przed wysłaniem $viewstate i $eventvalidation trzeba je potraktować urlencode()
-dziwnie tylko działa pierwszy curl pobierający właśnie $viewstate i $eventvalidation, raz wycina raz nie, dlatego dodałem for()

Ogólnie to zastanawiam się po kiego wała pobierać lewe menu z Actiona, rozumiem opisy, ceny itp. ale menu tongue.gif
pavelb
Mój skrypt właśnie przestał działać przenosi mnie do strony logowania :/
Czy wasze skrypty też przestały działać?

Wszystko mi działało dobrze do wczoraj :/
L00zak
Wszystko działa jak najlepiej, prawdopodobnie masz problem z sesjami, albo ciastkami. Jak coś to wklej swój skrypt i zobaczymy
pavelb
Niby loguje się i mam ciastko i wszystko wygląda OK, ale przy pobieraniu cennika csv przenosi mnie do strony logowania.

Testowałem ten twój skrypt i mam to samo, chyba że źle go użyłem.
kakq
Witam odkopuje temat;

Zainteresowałem się skryptem... Nie działa pokazuje się pusta strona... ewentualnie Błąd #3: malformed.
Ciacha zapisuje a w nich :

# Netscape HTTP Cookie File
# http://curlm.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.

i-serwis2.action.pl FALSE / FALSE 0 ASP.NET_SessionId mu4ndi235uzy256mj3ibhmaw55


Nic więcej się nie dzieje proszę o pomoc sad.gif
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.