PHP curl, сохранить сессию - PullRequest
       6

PHP curl, сохранить сессию

4 голосов
/ 08 февраля 2012

Я создаю приложение, которое удаляет данные с сайта, форматирует их по мере необходимости и отображает их для пользователя. Теперь сайт не разрешает межсайтовые запросы скриптов, поэтому я использую PHP curl для получения страницы.

  • С помощью браузера сайт при первом посещении дает вам файл cookie, с просьбой войти в систему, а при последующих запросах - фактически запрашиваемую вами страницу.

  • С помощью PHP curl сайт просто выдаст мне страницу с просьбой войти в систему. И, я полагаю, предоставит моему PHP-серверу файл cookie.

Как сохранить этот файл cookie и представить его при последующих запросах?

Ответы [ 3 ]

5 голосов
/ 08 февраля 2012

используйте несколько setopts, чтобы установить cookie.

Пример:

$ch=curl_init();
curl_setopt($ch, CURLOPT_COOKIEFILE, "c:/cookies/cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEJAR, "-");
3 голосов
/ 08 октября 2012

Я изменил код Nabab, попробовал его, и он работал отлично, как я хотел:

    $loginData = array('username'=>'myuser', 'password'=>'mypassword');
$postData = array('url'=>'http://stackoverflow.com');
$loginURL = "http://stackoverflow.com/login.php";
 $addURL = "http://stackoverflow.com/addUrl.php";

$curl_options = array(
    CURLOPT_RETURNTRANSFER => true,     /* return web page */
    CURLOPT_HEADER         => false,    /* don't return headers */
    CURLOPT_FOLLOWLOCATION => true,     /* follow redirects */
    CURLOPT_ENCODING       => "",       /* handle all encodings */
    CURLOPT_AUTOREFERER    => true,     /* set referer on redirect */
    CURLOPT_CONNECTTIMEOUT => 120,      /* timeout on connect */
    CURLOPT_TIMEOUT        => 120,      /* timeout on response */
    CURLOPT_MAXREDIRS      => 10,       /* stop after 10 redirects */
    CURLOPT_SSL_VERIFYHOST => 0,
    CURLOPT_SSL_VERIFYPEER => 0
);

$cookie = "cookie.txt";
if ( $ch = curl_init() )
{
    curl_setopt_array($ch,$curl_options);
    if ( $cookie )
    {
        curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_URL, $loginURL);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($loginData) );
        $r = curl_exec($ch);
        curl_setopt($ch, CURLOPT_URL, $addURL);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData) );
        $r = curl_exec($ch);

    }
     curl_close($ch);
}
1 голос
/ 08 февраля 2012

Вы должны использовать куки. Вот как я это делаю (я возвращаю массив с html-содержимым и кодировкой, которая может быть полезна для очистки):

$curl_options = array(
    CURLOPT_RETURNTRANSFER => true,     /* return web page */
    CURLOPT_HEADER         => false,    /* don't return headers */
    CURLOPT_FOLLOWLOCATION => true,     /* follow redirects */
    CURLOPT_ENCODING       => "",       /* handle all encodings */
    CURLOPT_AUTOREFERER    => true,     /* set referer on redirect */
    CURLOPT_CONNECTTIMEOUT => 120,      /* timeout on connect */
    CURLOPT_TIMEOUT        => 120,      /* timeout on response */
    CURLOPT_MAXREDIRS      => 10,       /* stop after 10 redirects */
    CURLOPT_SSL_VERIFYHOST => 0,
    CURLOPT_SSL_VERIFYPEER => 0
);
if ( $ch = curl_init($url) )
{
    curl_setopt_array($ch,self::$curl_options);
    if ( $cookie )
        curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie);
        $r = curl_exec($ch);
        curl_close($ch);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...