Скрипка экрана PHP и сессии - PullRequest
1 голос
/ 12 октября 2009

Ладно, еще новичок в скребке по экрану.

Мне удалось войти на нужный мне сайт, но как мне теперь перенаправить на другую страницу? После входа в систему я пытаюсь выполнить еще один запрос GET на нужной мне странице, но на нем есть перенаправление, которое возвращает меня на страницу входа.

Так что я думаю, что переменные SESSION не передаются, как я могу это преодолеть?

Проблема:

Даже если я публикую URL второй страницы, он все равно перенаправит меня обратно на страницу входа, если я уже не вошел в систему, но код очистки экрана не позволяет передавать данные SESSION?

Я нашел этот код из другой вопрос о скребке экрана здесь @ stack

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);
    }
}

Позвонив в класс

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 ]

4 голосов
/ 12 октября 2009

Следующие строки не используют «$ this», а $ cookieJar не входит в локальную область:

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

Так должно выглядеть:

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

Если это не решит проблему, попробуйте сделать только сообщение:

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

а не

$curl->get($newURL)

Тогда проверьте, содержит ли файл cookie.txt что-нибудь? Это создается? Дайте нам знать результаты, так как сложно быстро протестировать ваш код без фактического попадания URL.

Если он не создает файл cookie.txt, вы можете почти гарантировать, что сеанс не будет храниться между запросами.

0 голосов
/ 04 октября 2011

Это работает нормально, используя $ curl-> get ($ newURL) вместо $ curl-> postForm ($ url, $ fields, $ referer);

0 голосов
/ 12 октября 2009

Сайт, вероятно, пытается сохранить идентификатор сеанса в файле cookie. У вас есть curl, настроенный на использование куки через файл cookies.txt. Итак, моя первая мысль будет - что находится в файле cookies.txt? Есть ли у сценария разрешения на создание этого файла?

0 голосов
/ 12 октября 2009

возможно, пример неправильный ... но, судя по всему, домен меняется .. так что сессия here.com не существует на there.com

...