2009-07-04 13 views
9

Chciałbym zrobić skrypt php, który może przechwycić stronę ze strony internetowej. Think file_get_contents ($ url).file_get_contents z adresu URL, który jest dostępny tylko po zalogowaniu na stronie internetowej

Ta strona wymaga jednak podania loginu i hasła, aby móc uzyskać dostęp do dowolnej strony. Wyobrażam sobie, że po zalogowaniu strona internetowa wysyła do przeglądarki plik cookie uwierzytelniający iz każdym kolejnym zapytaniem przeglądarki, informacje o sesji są przekazywane do witryny w celu uwierzytelnienia dostępu.

Chcę wiedzieć, w jaki sposób mogę zasymulować to zachowanie przeglądarki za pomocą skryptu php, aby uzyskać dostęp i przechwycić stronę z tej witryny.

Dokładniej, moje pytania są następujące:

  1. Jak wysłać żądanie, które zawiera moje Zaloguj szczegóły tak, że strona odpowiada z sesji informacji/ciasteczka
  2. jak mogę przeczytaj sesję informacje/cookie
  3. Jak przekazać tę sesję informacje z każdym kolejnym wnioskiem (file_get_contents, curl) na na stronie internetowej.

Dzięki.

Odpowiedz

15

Curl doskonale nadaje się do tego. Nie musisz robić nic specjalnego poza ustawieniem opcji. Gdy zalogujesz się, przekazując pola formularza z witryny, plik cookie zostanie zapisany, a Curl użyje tego samego pliku cookie do kolejnych żądań automatycznie, co ilustruje poniższy przykład.

Należy pamiętać, że poniższa funkcja zapisuje pliki cookie na cookies/cookie.txt, więc upewnij się, że katalog/plik istnieje i może zostać zapisany.

$loginUrl = 'http://example.com/login'; //action from the login form 
$loginFields = array('username'=>'user', 'password'=>'pass'); //login form field names and values 
$remotePageUrl = 'http://example.com/remotepage.html'; //url of the page you want to save 

$login = getUrl($loginUrl, 'post', $loginFields); //login to the site 

$remotePage = getUrl($remotePageUrl); //get the remote page 

function getUrl($url, $method='', $vars='') { 
    $ch = curl_init(); 
    if ($method == 'post') { 
     curl_setopt($ch, CURLOPT_POST, 1); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $vars); 
    } 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies/cookies.txt'); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies/cookies.txt'); 
    $buffer = curl_exec($ch); 
    curl_close($ch); 
    return $buffer; 
} 
+0

Działa to uczta dla co chciałem - dzięki – Chris

+0

Chciałbym, aby to zadziałało na mnie, ale to nie jest = ( – Brade

+0

nie działa na mnie zbyt –

Powiązane problemy