Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z naglowkami http - fsockopen
Forum PHP.pl > Forum > PHP
shycat
Witam, chcialbym napisac sobie prosty skrypt PHP, ktory zaloguje sie na moje konto w serwisie fotka.pl i sprawdzi czy ktos przypadkiem nie wyslal do mnie wiadomosci. Sprawa wyglada niby prosto, poniewaz takie info dostepne sa zaraz po zalogowaniu.
Do tego celu napisalem sobie kod, ktory zawiera sie w 4 plikach: func_ciastka.php, func_glowna.php, func_logowanie.php i index.php

Oto source tych plikow:


Kod
func_ciastka.php
  
   <?
  
   function ciastka($dane="")
   {
     if ($dane=="") die("brak danych wchodzacych dla funkcji CIASTKA");
  
     $ex=explode("\r\n",$dane);
  
     $ciastko="";
  
     for ($i=0;;$i++)
     {
       if ($ex[$i]=="") break;
  
       $ex2=explode("Set-Cookie: ",$ex[$i]);
  
       if ($ex2[1]!="")
       {
         $ex3=explode("; expires=",$ex2[1]);
         $ex4=explode("; path=",$ex3[0]);
         $ciastko.=$ex4[0].";";
       }
     }
  
     return $ciastko;
   }
  
   ?>



func_glowna.php

Kod
<?
    
    function glowna($cookies="")
    {
    
    $host="www.fotka.pl";
    $path="/index.php";
    $port=80;
    $timeout=10;
    
    @$connect=fsockopen($host, $port, $errno, $errstr, $timeout);
    
    $error=false;
    
    if ($connect)
    {
      @fwrite($connect,
      "GET $path HTTP/1.1\r\n".
      "Host: $host\r\n".
      "Cookis: $cookies\r\n".
      "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7\r\n".
      "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n".
      "Accept-Language: pl,en-us;q=0.7,en;q=0.3\r\n".
    
      "Keep-Alive: 300\r\n".
      "Connection: keep-alive\r\n".
    
      "Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7\r\n".
      "Connection: close\r\n".
      "\r\n");
    }
    
    $link .= fread($connect,4096);
    $link .= fread($connect,4096);
    $link .= fread($connect,4096);
    
    fclose($connect);
    
    return $link;
    
    }
    
    ?>


func_logowanie.php

Kod
<?
    
    function logowanie()
    {
    
      $host="www.fotka.pl";
      $path="/login.php?form_login=1";
    
      $zmienne="login=LOGIN&pass=HASLO&back_url=/logout.php";
    
      $cookie="";
    
      @$connect=fsockopen($host,"80", $errno, $errstr,"10");
    
      if ($connect)
      {
        $head.=  "POST $path HTTP/1.1\r\n";
        $head.=  "Host: $host\r\n";
        $head.=  "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7\r\n";
        $head.=  "Content-Length: ".strlen($zmienne)."\r\n";
        $head.=  "Content-Type: application/x-www-form-urlencoded\r\n";
        $head.=  "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
        $head.=  "Accept-Language: pl,en-us;q=0.7,en;q=0.3\r\n";
        $head.=  "Accept-Encoding: gzip,deflate\r\n";
        $head.=  "Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7\r\n";
        $head.=  "Keep-Alive: 300\r\n";
        $head.=  "Connection: keep-alive\r\n";
        $head.=  "Referer: http://www.fotka.pl/login.php?back_url=%2Flogout.php\r\n";
        $head.=  "\r\n$zmienne\r\n";
    
        @fwrite($connect,$head);
      }
    
      $link=fread($connect,94096);
    
      fclose($connect);
    
      return $link;
    }
    
    ?>



index.php

Kod
<?
    
    include("./func_logowanie.php");
    include("./func_ciastka.php");
    
    include("./func_glowna.php");
    
    $logowanie=logowanie();
    $cookies=ciastka($logowanie);
    
    echo"<tt>";
    
    
    $log=$logowanie;
    
    $log=str_replace("\r\n","
    ",$log);
    
    echo $log;
    
    echo"\n\n\n<hr>\n\n\n";
    
    echo $cookies;
    
    echo"\n\n\n<hr>\n\n\n";
    
    $gl=glowna($cookies);
    
    $gl=str_replace("\r\n","
    ",$gl);
    
    echo $gl;
    
    
    ?>



Po wpisaniu odpowiedniego loginu i hasla w pliku func_logowanie.php skrypt "nadaje" sie do pracy, jednak kiedy otwieramy po tym index.php widac, ze nie wszystko jest dobrze ... niby otrzymujemy dobre dane zwrotne od serwera w sprawie logowania -> cookies itp, lecz kiedy probuje otworzyc strone index.php gdzie po zalogowaniu jest info o wiadomosciach to nie otwiera strony jako uzytkownik zalogowany lecz jako niezalogowany... kod przegladalem kilka razy, dlugo sie z nim meczylem, dla tego postanowilem napisac na forum, bo sam chyba nie dam rady... prosilbym o rozwiazanie problemu lub chociaz o wskazowki co robie zle.
Ps. nie chce uzywac cURL'a wole tym sposobem.

Pozdrawiam.

Cala sprawa wydaje sie lekko trudna do rozwiazania, ale mam nadzieje, ze znajdzie sie jakis profesjonalista, ktory pomoze mi rozwiazac problem, poniewaz sam nie daje rady, pozdrawiam.
shine
Chyba jednak bez cURL sie nie obedzie. Pamietaj ze protokol http jest protokolem BEZSTANOWYM dlatego requesty Twojego skryptu sa widziane jako niezależne operacje. cURL emuluje dopiero zalogowanego uzytkownika.
shycat
Niestety nie bardzo znam sie na cURL'u moglbym prosic o kawalek kodu? Tzn, jak wyslac pojedyncze zapytanie z cURL'a to wiem, ale jesli chodzi o to co napisal poprzednik Shine, to nie mam zielonego pojecia.
shine
Gdzies znalezione

  1. <?php
  2. $cookie_file = 'cookie.txt';
  3.  
  4. $c = curl_init('http://nasza-klasa.pl/');
  5. curl_setopt($c, CURLOPT_COOKIEJAR, $cookie_file);
  6. curl_setopt($c, CURLOPT_COOKIEFILE, $cookie_file);
  7. curl_setopt($c, CURLOPT_URL, 'http://nasza-klasa.pl/login');
  8. curl_setopt($c, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12;MEGAUPLOAD 1.0");
  9. curl_setopt($c, CURLOPT_POST, 1);
  10. curl_setopt($c, CURLOPT_POSTFIELDS,
  11. 'login=bimusiek&password=*****&remember=1');
  12. curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
  13. curl_getinfo($c);
  14. $s = curl_exec($c);
  15. curl_close($c);
  16.  
  17. $ch = curl_init();
  18. $url = 'http://nasza-klasa.pl/profile/6236510';
  19. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
  20. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
  21. curl_setopt($ch, CURLOPT_URL, $url);
  22. curl_setopt($ch, CURLOPT_HEADER, 0);
  23. curl_setopt($ch, CURLOPT_COOKIE, $cookie);
  24. curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12;MEGAUPLOAD 1.0");
  25. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  26. $site = curl_exec($ch);
  27. $info = preg_replace('!.*<div class="cool_box_inner">
  28. <strong>Podstawowe informacje</strong>(.*?)</div>.*!is', '$1', $site);
  29. preg_match_all('!<td.*?>(.*?)</td>!isx', $info, $info_);
  30. $info_ = $info_[0];
  31. $dane['imie'] = $info_[3];
  32. $dane['nazwisko'] = $info_[5];
  33. $dane['pseudonim'] = $info_[7];
  34. $dane['telefon'] = $info_[9];
  35. $dane['miasto'] = $info_[11];
  36. $dane['wiek'] = $info_[13];
  37. $dane['plec'] = $info_[15];
  38. $dane['gg'] = $info_[17];
  39. $dane['skype'] = $info_[19];
  40. print_r($dane);
  41. ?>
shycat
Dzieki Shine, przerobilem troche ten skrypt i wszystko smiga... bardzo mi pomogles, dziekuje. + dla Ciebie oczywiscie smile.gif
bartekk8
siema, tez probuje sie zalogowac na fotke za pomoca Curla, ale cos mi nie wychodzi, Shycat: mozesz sie podzielic swoim kodem ?smile.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.