cUrl Вход в систему cUrl Загрузить

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

Вот мой рабочий код:

$cookie_file_path = "downloads/cookie.txt"; $fp = fopen($cookie_file_path, "w"); fclose($fp); $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_NOBODY, false); curl_setopt($ch, CURLOPT_URL, $loginUrl); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $loginPostInfo); curl_exec($ch); // harddcode some known data $downloadSize = 244626770; $chuckSize = 1024*2048; $filePath = "downloads/file.avi"; $file = fopen($filePath, "w"); $downloaded = 0; $startTime = microtime(true); while ($downloaded < $downloadSize) { // DOWNLOAD curl_setopt($ch, CURLOPT_RANGE, $downloaded."-".($downloaded + $chuckSize - 1)); curl_setopt($ch, CURLOPT_URL, $downloadUrl); $result = curl_exec($ch); $nowTime = microtime(true); fwrite($file, $result); echo "\n\nprogress: ".$downloaded."/".$downloadSize." - %".(round($downloaded / $downloadSize, 4) * 100); $downloaded += $chuckSize; // calculate kbps $totalTime = $nowTime - $startTime; $kbps = $downloaded / $totalTime; echo "\ndownloaded: ".$downloaded." bytes"; echo "\ntime: ".round($totalTime, 2); echo "\nkbps: ".(round($kbps / 1024, 2)); } fclose($file); curl_close($ch); 

Таким образом, можно закрыть завиток после входа curl_exec, а затем снова открыть завиток, чтобы загрузить файл, используя файл cookie, который я сохранил во время входа в систему?

Related of "cUrl Вход в систему cUrl Загрузить"

Да, это возможно.

CURLOPT_COOKIEJAR – путь записи для файлов cookie, а CURLOPT_COOKIEFILE – это путь чтения для файлов cookie. Если вы предоставите CURLOPT_COOKIEFILE с тем же путем, что и с CURLOPT_COOKIEJAR , cURL сохранит файлы cookie через запросы:

 curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path); 

На ImpressPages я сделал это так:

 //initial request with login data $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/login.php'); curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/32.0.1700.107 Chrome/32.0.1700.107 Safari/537.36'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, "username=XXXXX&password=XXXXX"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_COOKIESESSION, true); curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie-name'); //could be empty, but cause problems on some hosts curl_setopt($ch, CURLOPT_COOKIEFILE, '/var/www/ip4.x/file/tmp'); //could be empty, but cause problems on some hosts $answer = curl_exec($ch); if (curl_error($ch)) { echo curl_error($ch); } //another request preserving the session curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/profile'); curl_setopt($ch, CURLOPT_POST, false); curl_setopt($ch, CURLOPT_POSTFIELDS, ""); $answer = curl_exec($ch); if (curl_error($ch)) { echo curl_error($ch); } 

Да, пожалуйста, перейдите в CURLOPT_COOKIEJAR и CURLOPT_COOKIEFILE. Я вижу, что вы уже используете CURLOPT_COOKIEJAR, поэтому вам, вероятно, следует только погрузиться в * _COOKIEJAR.