Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] cURL wykonywanie skryptu
Forum PHP.pl > Forum > Przedszkole
thede
Witam.

Mój problem polega na tym, że chcę wywołać skrypt na innej stronie.

Próbuję przez cURL:

  1. <?php
  2. $curl = curl_init();
  3. curl_setopt($curl, CURLOPT_URL, $site);
  4. curl_setopt($curl, CURLOPT_REFERER, $site);
  5. curl_setopt($curl, CURLOPT_HEADER, true);
  6. @curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
  7. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  8. curl_setopt($curl, CURLOPT_USERAGENT, UA);
  9. $strona = curl_exec($curl);
  10. curl_close($curl);
  11. ?>


i treść strony, która byłaby widoczna w przeglądarce jest wczytywana do zmiennej strona,
ale np. wywoływany na stronie skrypt nie tworzy ciasteczka z identyfikatorem sesji i nie tworzy wpisu do bazy (a przy wywoływaniu przez przeglądarkę wszystko jest w porządku).

Chodzi mi o to, żeby wszystko na wywoływanej stronie wykonało się tak, jakbym wszedł na nią przez przeglądarkę.

Oczywiście mogę otworzyć ją w ukrytym iframe i wtedy wszystko gra, ale znowu treść musi się załadować a to przecież trwa...

Jeśli ktoś byłby w stanie mi pomóc byłbym bardzo wdzięczny worriedsmiley.gif
bim2
Hmm, nie ma możliwości, że nie dodaje nic do bazy. Sesji nie stworzy bo nie wskazałeś miejsca gdzie mają leżec ciasteczka od curla winksmiley.jpg (google -> curl cookies php). Może jakiś zmiennych nie wysyłasz?
thede
Sorry, rzeczywiście w bazie zapisuje, ale ciasteczka nie tworzy, mimo że dopisałem:

  1. <?php
  2. curl_setopt($curl, CURLOPT_COOKIEFILE, 'cookiefile');
  3. curl_setopt($curl, CURLOPT_COOKIEJAR, 'cookiefile');
  4. ?>
MiChaSSs
u mnie dziala cos takiego:

  1. <?php
  2. curl_setopt($handle, CURLOPT_COOKIEFILE, 'Skrypty/cookies.txt');
  3. curl_setopt($handle, CURLOPT_COOKIEJAR, 'Skrypty/cookies.txt');
  4. ?>


sprobuj podac pelna nazwe sciezki, oczywiscie musisz miec tam odpowiednie prawa do zapisu/odczytu
thede
Teraz stworzyłem sobie dwa pliki.
Pierwszy:
  1. <?php
  2. $curl = curl_init();
  3. curl_setopt($curl, CURLOPT_URL, $site);
  4. curl_setopt($curl, CURLOPT_REFERER, $site);
  5. curl_setopt($curl, CURLOPT_HEADER, true);
  6. @curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
  7. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  8. curl_setopt($curl, CURLOPT_COOKIEJAR, dirname(__FILE__).'/cookiefile');
  9. curl_setopt($curl, CURLOPT_COOKIEFILE, dirname(__FILE__).'/cookiefile');
  10. $strona = curl_exec($curl);
  11. curl_close($curl);
  12. echo nl2br($strona);
  13. ?>

Drugi:
  1. <?php
  2. ?>

gdzie w $site jest adres drugiego.
I teraz po wywołaniu drugiego pliku oczywiście tworzy się ciasteczko z PHPSESSID.
Natomiast przy wywołaniu pierwszego nie tworzy się żadne cookie.
Dlaczego??
erix
Bo ciasteczko sesyjne ma domyślnie długość sesji przeglądarki? Tzn. po jej zamknięciu jest kasowane. Tak samo z cURL, to jakby wystąpienie przeglądarki, które jest zamykane w ramach działania jednego skryptu. IMHO musiałbyś przechwycić ciastko i zmienić długość jego przydatności do spożycia. ;]
MiChaSSs
sprobuj z czyms takim (u mnie na kompie funkcja ktora z tego korzysta dziala bez problemow):

  1. <?php
  2.    $timeout = 3;
  3.    $handle = curl_init($url);
  4.    $headers = array('User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008110416 Gentoo Firefox/3.0.3r\n',
  5.                     'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8r\n',
  6.                     'Accept-Language: en-us,en;q=0.5r\n',
  7.                     'Accept-Encoding: gzip,deflater\n',
  8.                     'Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7r\n',
  9.                     'Keep-Alive: 300r\n',
  10.                     'Connection: keep-aliver\n');
  11.  
  12.    curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, $timeout);
  13.    curl_setopt($handle, CURLOPT_TIMEOUT, $timeout);
  14.    curl_setopt($handle, CURLOPT_FRESH_CONNECT, true);
  15.    curl_setopt($handle, CURLOPT_HTTPHEADER, $headers);
  16.    curl_setopt($handle, CURLOPT_HEADER, false);
  17.    curl_setopt($handle, CURLOPT_ENCODING, 'gzip');
  18.    curl_setopt($handle, CURLOPT_ENCODING, 'deflate');
  19.    curl_setopt($handle, CURLOPT_COOKIEFILE, 'Skrypty/cookies.txt');
  20.    curl_setopt($handle, CURLOPT_COOKIEJAR, 'Skrypty/cookies.txt');
  21.    curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true); // follow redirection
  22.  
  23. /*                               do metody GET
  24.  
  25.     curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
  26.     curl_setopt($handle, CURLOPT_HTTPGET, true);
  27. */
  28.  
  29. /*                               do metody POST
  30.  
  31.         curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
  32.         curl_setopt($handle, CURLOPT_POST, true);
  33.         curl_setopt($handle, CURLOPT_POSTFIELDS, $post_msg);
  34. */
  35.  
  36.    $output = curl_exec($handle);
  37. ?>
thede
już wszystko działa.
thx wszystkim
MiChaSSs
napisz chociaz co bylo nie tak i jak to rozwiazales 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.