PHP Curl Войти и получить данные - PullRequest
0 голосов
/ 26 февраля 2012

Я пытаюсь создать приложение php, которое входит в Comcast здесь

https://login.comcast.net/login

и скачайте файл

http://xfinity.comcast.net/

вспоминая печенье.

Вот что у меня есть:

<?php
$username="username"; 
$password="password"; 
$url="https://login.comcast.net/login"; 
$cookie="cookie.txt"; 

$postdata = "user=".$username."&passwd=".$password."&rm=2&deviceAuthn=false&forceAuthn=true&s=ccentral-cima&r=comcast.net&continue=http://xfinity.comcast.net/"; 

$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_URL, $url); 
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); 
curl_setopt ($ch, CURLOPT_TIMEOUT, 60); 
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 0); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie); 
curl_setopt ($ch, CURLOPT_REFERER, $url); 

curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata); 
curl_setopt ($ch, CURLOPT_POST, 1); 
$result = curl_exec ($ch); 

echo $result;  
curl_close($ch);
file_put_contents("page.txt",$ch);

echo $cookie;
?>

Этот скрипт выполняет только вход в систему и показывает мне

https://customer.comcast.com/Public/Home.aspx

когда я вошел в систему, а затем, когда я нажимаю, например, электронную почту, он просто обращается со мной, как будто я никогда не входил в систему, запрашивая у меня имя пользователя и пароль. Все, что я хочу, это получить количество электронных писем, сохранив http://xfinity.comcast.net/ (с cookie) на page.txt

Может ли это быть возможно?

Ответы [ 2 ]

0 голосов
/ 27 февраля 2012

Прежде всего, было бы удобно, если бы вы поместили линии скручивания в функцию.

Теперь шаги должны быть довольно простыми.

РЕДАКТИРОВАТЬ
Убедитесь, что cookie.txt находится в том же каталоге, что и ваш php-файл.и убедитесь, что это доступно для записи.(chmod 777), чтобы проверить:

if (is_writable('cookie.txt')) {
    echo 'The cookie is writable';
} else {
    echo 'The cookie is not writable';
    ## start by making it writable :
   if (! chmod ( 'cookie.txt', 0777 ))
        die ( 'chmod() failed on file cookie.txt' );
}
  1. войти и сохранить данные cookie для входа в систему с помощью curl.(убедитесь, что cookie.txt существует и доступен для записи).
  2. Сделайте еще один завиток С cookie и включите страницу.

Примерно так:

//@param string $url : url of page/file
    //@param bool $binary : binary file.
    //@param string $post : post data in format : formvar1=VAR1&formvar2=VAR2
    //@param string $cookie : cookie file.

function curl($url ,$binary=false,$post=false,$cookie =false ){

$ch = curl_init();

        curl_setopt ($ch, CURLOPT_URL, $url );
        curl_setopt ($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_REFERER, $url);
        curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
        curl_setopt($ch, CURLOPT_AUTOREFERER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 60);
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);



        if($cookie){

            $agent = "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)";
            curl_setopt($ch, CURLOPT_USERAGENT, $agent);
            curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
            curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);

        }


        if($binary)
            curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);

        if($post){
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
        }

     return  curl_exec ($ch);
}

Затем войдите:

$username="username"; 
$password="password"; 
$url="https://login.comcast.net/login"; 
$cookie="cookie.txt"; 

$postdata = "user=".$username."&passwd=".$password."&rm=2&deviceAuthn=false&forceAuthn=true&s=ccentral-cima&r=comcast.net&continue=http://xfinity.comcast.net/"; 

// function
$ch = curl($url,false,$postdata,$cookie);

Вы вошли в систему?проверьте содержимое файла cookie.txt.

Шаг 2, найдите вторую страницу.

$url ='http://xfinity.comcast.net/'
$cookie="cookie.txt"; 

$ch =curl($url,false,false,$cookie);

echo $ch;

Что-то в этом роде ... Дайте мне знать, если это работает.

0 голосов
/ 26 февраля 2012

Обязательно установите CURLOPT_COOKIEFILE. Jar - это то, что записано, файл отправляется на сервер.

Кроме того, если вы хотите сделать оба в одном запросе, вы должны запросить сервер дважды. Один раз для входа (с CURLOPT_COOKIEJAR) и второй раз для получения актуального контента (с CURLOPT_COOKIEFILE).

Более того, нет необходимости устанавливать CURLOPT_FOLLOWLOCATION в false, поскольку при входе в систему обычно происходит перенаправление. Я бы изменил его на true, просто чтобы убедиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...