PHP CURLOPT_COOKIEFILE / CURLOPT_COOKIEJAR, похоже, не работают на удаленном сервере

#php #cookies #curl #cookiejar

#php #файлы cookie #curl #cookiejar

Вопрос:

У меня довольно интересная проблема с передачей файлов cookie с использованием curl. У меня есть скрипт, который входит в систему очередей моей компании, а затем получает файлы cookie при успешном входе в систему. Позже скрипт вызовет эти файлы cookie, чтобы запросить систему и проанализировать выходные данные. Скрипт работает безупречно на localhost, но при переносе его на сервер компании этого не происходит. Создается файл cookie, но все размеры файла = 0 байт. Я думаю, что это проблема с разрешениями, но я не понимаю, как (я зашел так далеко, что изменил файлы 777 в chmod). Самое странное, что я могу использовать fwrite () для добавления в любой из файлов. Я не совсем уверен, с чего начать отладку здесь, поэтому я надеюсь, что у кого-то из вас может возникнуть идея. Ниже приведены соответствующие фрагменты кода:

 [syntax=php]

main class{

include_once('../shared_data/cquserdata.php');
$ckfile_name = tempnam('temp/', sha1('CqAuth'));
$ckfile = fopen($ckfile_name, 'w') or die('Derp...open...nooooooooo!');

cqUserData::cqLogin($credentials['username'],$credentials['pass'],$ckfile);

(skip a few thousand lines)
$puname = sanitizers::sanitize($_POST['puname']); //sanitize post input
$manager = cqUserData::getManager($puname, $ckfile);


}

cqLogin($username, $pass, $ckfile){

$url = 'URL';

        $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,
            CURLOPT_USERAGENT      => 'uuberness',
            CURLOPT_COOKIEJAR     => $ckfile,
            CURLOPT_POSTFIELDS     => "redirect=amp;username=$usernameamp;password=$pass" //derp

        );

        $ch      = curl_init( $url );
        curl_setopt_array( $ch, $options );
        $content = curl_exec( $ch );
        $err     = curl_errno( $ch );
        $errmsg  = curl_error( $ch );
        $header  = curl_getinfo( $ch );
        curl_close( $ch );

        return true;

}

getManager($user,$ckfile){

$url = "URL"';

        $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,
            CURLOPT_USERAGENT      => 'uuberness',
            CURLOPT_COOKIEFILE     => $ckfile,
            CURLOPT_POSTFIELDS     => "username=$useramp;usernamecheck=1" //derp

        );

        $ch      = curl_init( $url );
        curl_setopt_array( $ch, $options );

        $content = curl_exec( $ch );
        $err     = curl_errno( $ch );
        $errmsg  = curl_error( $ch );
        $header  = curl_getinfo( $ch );

        curl_close( $ch );

        $header['errno']   = $err;
        $header['errmsg']  = $errmsg;
        $header['content'] = $content;
        $header['data'] = $data;

        $doc = new DOMDocument;

        $doc->loadHTML($content);
        $doc->preserveWhiteSpace = false;
        $tables = $doc->getElementsByTagName('table');

        foreach($tables as $table){

            ***Code excluded, loops rows to find correct, then defines manager**

            $manager = $manager[1];


        }

        return $manager;

}

[/syntax]
  

На данный момент я думаю, что было бы неплохо попытаться просто проанализировать заголовки файлов cookie и поработать с ними …. но это далеко не идеально. Любые предложения приветствуются: D

Спасибо!

Ответ №1:

Приветствую,

Итак, я выяснил, в чем была проблема. Я открывал файл с помощью fopen (), затем передавал обработчик файла в cURL. Что я должен был сделать, так это передать полный путь к файлу имя в cURL. Исправлена часть кода:

 $ckfile = dirname(__FILE__) . "/". sha1($username);