PHP Ekran Kazıma ve Seanslar

4 Cevap php

Ekran kazıma şey hala yeni Tamam.

I've managed to log into the site I need but now how do I redirect to another page? After I login I'm trying to do another GET request on the page that I need but it has a redirect on it that takes me back to the login page.

Peki ben nasıl boyunca bu gelebilir, OTURUM değişkenler geçirilen değil düşünüyorum?

Sorun:

Ben 2. sayfa URL'sini yayınlamak bile ben zaten giriş yaşıyorum sürece hala, giriş sayfasına beni yönlendirir, ancak ekran kazıma kod OTURUM veri geçirilmesine izin vermiyor?

I another screen scraper question here @stack bu kodu bulundu

class Curl {

    public $cookieJar = "";

    public function __construct($cookieJarFile = 'cookies.txt') {
        $this->cookieJar = $cookieJarFile;
    }

    function setup() {
        $header = array();
        $header[0]  = "Accept: text/xml,application/xml,application/xhtml+xml,";
        $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
        $header[]   = "Cache-Control: max-age=0";
        $header[]   = "Connection: keep-alive";
        $header[]   = "Keep-Alive: 300";
        $header[]   = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
        $header[]   = "Accept-Language: en-us,en;q=0.5";
        $header[]   = "Pragma: "; // browsers keep this blank.

        curl_setopt($this->curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7');
        curl_setopt($this->curl, CURLOPT_HTTPHEADER, $header);
        curl_setopt($this->curl, CURLOPT_COOKIEJAR, $cookieJar);
        curl_setopt($this->curl, CURLOPT_COOKIEFILE, $cookieJar);
        curl_setopt($this->curl, CURLOPT_AUTOREFERER, true);
        curl_setopt($this->curl, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, true);
    }

    function get($url) {
        $this->curl = curl_init($url);
        $this->setup();

        return $this->request();
    }

    function getAll($reg, $str) {
        preg_match_all($reg, $str, $matches);
        return $matches[1];
    }

    function postForm($url, $fields, $referer = '') {
        $this->curl = curl_init($url);
        $this->setup();
        curl_setopt($this->curl, CURLOPT_URL, $url);
        curl_setopt($this->curl, CURLOPT_POST, 1);
        curl_setopt($this->curl, CURLOPT_REFERER, $referer);
        curl_setopt($this->curl, CURLOPT_POSTFIELDS, $fields);
        return $this->request();
    }

    function getInfo($info) {
        $info = ($info == 'lasturl') ? curl_getinfo($this->curl, CURLINFO_EFFECTIVE_URL) : curl_getinfo($this->curl, $info);
        return $info;
    }

    function request() {
        return curl_exec($this->curl);
    }
}

Sınıfını çağırıyor

include('/var/www/html/curl.php');
$curl = new Curl();

$url = "here.com";
$newURL = "here.com/newpage.php";

$fields = "usr=user1&pass=PassWord";

// Calling URL
$referer = "http://here.com/index.php";

$html = $curl->postForm($url, $fields, $referer);
$html = $curl->get($newURL);

echo $html; // takes me back to $url instead of $newURL

4 Cevap

Aşağıdaki satırlar ve $ cookiejar yerel kapsamında değildir "$ this" kullanmayın:

curl_setopt($this->curl, CURLOPT_COOKIEJAR, $cookieJar);
curl_setopt($this->curl, CURLOPT_COOKIEFILE, $cookieJar);

Yani gibi görünmelidir:

    curl_setopt($this->curl, CURLOPT_COOKIEJAR, $this->cookieJar);
    curl_setopt($this->curl, CURLOPT_COOKIEFILE, $this->cookieJar);

Bu sorunu denemek düzeltmek ve sadece yazı yapmak değilse:

$curl->postForm($url, $fields, $referer);

olup

$curl->get($newURL)

Cookie.txt dosya içeriyorsa, o zaman kontrol? Bu oluşturulan olsun mu? Hızla gerçek bir URL vurulduktan olmadan kodu test etmek zor olduğu gibi bize sonuçları bildirin.

O daha cookie.txt dosyası yaratmak değilse neredeyse oturum istekleri arasında tutuluyor olmadığını garanti edemez.

belki örnek doğru değil .. ama bunun görünüyor gelen etki değişiyor .. yani here.com oturum alışkanlık there.com mevcut

Site muhtemelen bir tanımlama session id saklamak için çalışıyor. Sen kıvırmak olsa "cookies.txt" dosyası ile çerezleri kullanmak için kurdunuz. Yani, benim ilk düşünce olurdu - cookies.txt dosyada ne var? Aslında script bu dosyayı oluşturmak için izniniz var mı?

Bu $ ile iyi çalışıyor kıvırmak-> $ yerine curl-> postForm ($ url, $ alanlar, $ referer) ve ($ newURL) olsun;