Laravel cURL不会写cookie文件

时间:2017-12-20 10:58:34

标签: php curl cookies laravel-5.2

我发现很多像我这样的问题,遗憾的是没有为我工作的解决方案。我创建了一个抓取网站的功能,但对于某些网站,我需要设置一些cookie来获取相关内容。 我的网站使用的是Laravel 5.2框架,问题是它不会将cookie文件保存到存储路径(或者也不会保存给公众)。

多年前在非Laravel网站上我使用了相同的功能,创建cookie文件没有问题。

这是功能:

function getFileContentByCurl($strURL, $objPost = "", $strReferrer = "", $objHeaders = "", $strCookie = "") {

        $ch = curl_init(); 
        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0");
        curl_setopt($ch, CURLOPT_URL, $strURL);
        curl_setopt($ch, CURLOPT_VERBOSE, 1);
        curl_setopt($ch, CURLOPT_COOKIESESSION, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        // curl_setopt($ch, CURLOPT_HEADER, true);

        $cookie_file = storage_path('app/cookies.txt');

        if($strCookie) {
            curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); 
            curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
        }   
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
        curl_setopt($ch, CURLOPT_BUFFERSIZE, 65536);
        curl_setopt($ch, CURLOPT_ENCODING, "");

        if($strCookie != "") {curl_setopt($ch, CURLOPT_COOKIE, $strCookie);}
        if($strReferrer != "") {curl_setopt($ch, CURLOPT_REFERER, $strReferrer);}
        if($objHeaders != "") {curl_setopt($ch, CURLOPT_HTTPHEADER, $objHeaders);}
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        if($objPost != ""){curl_setopt($ch, CURLOPT_POST,1); curl_setopt($ch, CURLOPT_POSTFIELDS, $objPost);}
        $returned = curl_exec($ch);

        curl_close($ch);
        sleep(5);
        return $returned;

}

我试图在存储目录中放入一个空文件,但它没有写入。已检查文件是否可写且是。

1 个答案:

答案 0 :(得分:0)

我所能建议的是将代码缩减到最小的解决方案,其中cookie文件/ jar将起作用,然后从那里进行备份。

<强> curl.php

<?php

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://localhost/cookie.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
echo curl_exec($ch);

<强> cookie.php

<?php
if( !isset($_COOKIE['testcookie']))
{
  setcookie('testcookie',date('r'),time()+10);
}
print_r($_COOKIE);