Laravel cURL不会写cookie文件

问题描述 投票:0回答:1

我发现很多像我这样的问题,不幸的是没有为我工作的解决方案。我创建了一个抓取网站的功能,但对于某些网站,我需要设置一些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;

}

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

php curl cookies laravel-5.2
1个回答
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);
© www.soinside.com 2019 - 2024. All rights reserved.