PHP/CURL Hämta data från lösenords skyddad sida.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Sep 2007

PHP/CURL Hämta data från lösenords skyddad sida.

Har försökt mig på en hel del metoder jag hittat via google men ingen som fungerat.

Så här ser login formen på sidan ut:

<form action="/processlogin" method="post"> Username:<input class="input" type="text" name="username"><br/> Password: <input class="input" type="password" name="password"><br /> <input class="submit" type="submit" class="button" name="submit" value="submit"><br /> </form>

PHP/CURL koden jag har testat med är:
Index.php

<?php include ("crawler.php"); $crawler = new Secure_Crawler(); // Login to website $crawler->login('username', 'password'); // Get Content $content = $crawler->get('http://www.testsida.com/members.php'); echo htmlentities($content); // modifications... ?>

crawler.php

<?php /** * Code example * * More info available in http://dev.juokaz.com/ * * @author Juozas Kaziukenas <juozas@juokaz.com> */ class Secure_Crawler { private $loginUrl = 'http://www.testsida.com/login.php'; private $options = array( ); private $connected = false; function __construct () { $cookies = 'cookies_path.txt'; $this->options = array( CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1', CURLOPT_HEADER => true, // Add response headers to return, for testing CURLOPT_RETURNTRANSFER => true, // Add html to return CURLOPT_COOKIEJAR => $cookies, CURLOPT_COOKIEFILE => $cookies, ); // Reset cookies @ unlink($cookies); } function login ($username, $password) { $ch = curl_init(); $options = $this->options; $options[CURLOPT_URL] = $this->loginUrl; $options[CURLOPT_POST] = true; // Login form fields $options[CURLOPT_POSTFIELDS] = $this->getPostFields( array( 'username' => $username, 'password' => $password, 'submit' => 'submit' )); $options[CURLOPT_FOLLOWLOCATION] = false; curl_setopt_array($ch, $options); curl_exec($ch); //Close curl session curl_close($ch); $this->connected = true; } function get ($url) { if (!$this->connected) throw new Excetion("Not connected"); $ch = curl_init(); //Get $options = $this->options; $options[CURLOPT_URL] = $url; curl_setopt_array($ch, $options); $results = curl_exec($ch); //Close curl session curl_close($ch); return $results; } private function getPostFields ($data) { $return = array(); foreach ($data as $key => $field) { $return[] = $key . '=' . urldecode($field); } return implode('&', $return); } } ?>

Någon som vet varför det inte fungerar / hur man kan göra det på ett annat sätt?

Mvh.

[ASUS P9X79] [Corsair RM850i] [Corsair 32GB DDR3 1600mhz] [i7 3930K] [Noctua NH-D14] [Gainward GTX 1080 "GLH" Golden Sample 8GB GDDR5X][Sandisk 256GB][Fractal Design Define S]

Trädvy Permalänk
Medlem
Registrerad
Jul 2001

Du ska inte logga in först och sedan hämta datat utan du ska hämta data och skicka med inloggningen.

Det betyder att ditt anrop till curl_exec($ch); i Login metod borde returnera själva sidan.

Edit: Detta gäller inte om sidan du hämtar data ifrån på något vis skapar en session och spar inloggningen på det sättet. I så fall måste du skicka med session cookien som den sätter.

Det vore även bra om du säger vad som inte fungerar, ger lite debug-utskrifter mm