【问题标题】:how can i download with php curl on the remote page with cookies?如何在带有 cookie 的远程页面上使用 php curl 下载?
【发布时间】:2012-09-29 10:03:41
【问题描述】:

更新的脚本

我正在尝试登录网页并将会话保存在文本文件中。

登录成功,如果需要,将我重定向到会员页面或其他页面。

但是现在我需要用 curl 下载一个文件,服务器说 致命错误:内存不足

  ini_set("memory_limit","2048M");    //Limite 2GB
  set_time_limit(0);                  //Tiempo de transferencia ilimitada

  //Definimos las variables de la pagina
  $username    = ""; 
  $password    = "";
  $loginUrl    = 'http://login.mysite.com/login.php';
  $loginFields = array('username' => $username, 'password' => $password);

  //Ahora se ha iniciado la sesion y la sesion de la cookie ha sido generada
  getUrl($loginUrl, 'post', $loginFields); 

  //Cargamos la pagina que queremos ver
  $remote_page_content = getUrl('http://miembros.mysite.com/3098');
  echo $remote_page_content;

  //Simple funcion para acceder
  function getUrl($url, $method='', $vars='') 
  {
        $ch = curl_init();
        if ($method == 'post') 
        {
        curl_setopt ($ch, CURLOPT_POST, 1);
        curl_setopt ($ch, CURLOPT_POSTFIELDS, $vars);
        }

        curl_setopt ($ch, CURLOPT_URL, $url);
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
        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_COOKIEJAR, 'cookie.txt');
        curl_setopt ($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
        curl_setopt ($ch, CURLOPT_MAXREDIRS, 10);
        curl_setopt ($ch, CURLOPT_TIMEOUT, 0);
        curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 0);
        curl_setopt ($ch, CURLOPT_FAILONERROR, true);
        curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);
        $buffer = curl_exec($ch);
        curl_close ($ch);

        return $buffer;
  }

所以我用这个来调用下载文件:

  //Cargamos la pagina que queremos ver
  $remote_page_content = getUrl('http://content.mysite.com/PSP.mp4/');
  file_put_contents('/downloads/video.mp4',file_get_contents($remote_page_content));

有什么想法吗?

谢谢

【问题讨论】:

  • 第一次调用后 cookie.txt 中有什么内容?

标签: php curl download remote-access


【解决方案1】:

尝试替换以下行:

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

对于这个:

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

您似乎在变量中打错了字,您需要文件名 ($cookie) 而不是已经关闭的描述符 ($cookies)。这是在您的 login() 函数中。

更新
如果您在 ONE 会话期间处理多个页面,请尝试添加以下内容:

curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE); 
curl_setopt($ch, CURLOPT_COOKIE, session_name() . '=' . session_id()); 

【讨论】:

  • 但在此模式下,cookie 不会存储在 cookie 文件中
  • 为什么不呢?你试过了吗? CURLOPT_COOKIEJAR 和 CURLOPT_COOKIEFILE 需要一个文件名,这就是 $cookie 所具有的。
  • 您的问题可能是由于从同一个会话中获取多个页面,我已经用一些您可以尝试的选项更新了我的答案。
  • 我试过了。但没有在 cookie.txt 文件中写入任何内容,并且我正确登录,但我无法使用 cookie 进行下载
  • 是的,但我收到一个错误标头已发送,但如果我输入curl_setopt($ch, CURLOPT_COOKIESESSION , true);,则什么都不做
猜你喜欢
  • 1970-01-01
  • 2014-01-22
  • 1970-01-01
  • 1970-01-01
  • 2013-05-15
  • 1970-01-01
  • 2018-04-25
  • 2014-12-01
  • 1970-01-01
相关资源
最近更新 更多