【发布时间】:2017-12-21 06:35:11
【问题描述】:
我发现了很多像我这样的问题,很遗憾没有适合我的解决方案。我已经创建了一个用于抓取网站的功能,但是对于某些网站我需要设置一些 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;
}
我试图在存储目录中放置一个空文件,但它没有写入。已检查文件是否可写。
【问题讨论】:
-
我可以建议您在使用
CURLOPT_COOKIEFILE+CURLOPT_COOKIEJAR时不要使用CURLOPT_COOKIE。该文件应该自动保留 cookie。 -
@Scuzzy 我已经删除了它,但它仍然没有写入 cookie 文件
-
is_writeable()对该文件夹/路径有何看法? -
@Scuzzy 如果我把一个空文件放在那里,它说这是可写的,但它没有写任何东西。或者如果没有文件,它不会自己创建
-
你的代码肯定会激活那些 cookie 文件/jar 选项(即
if($strCookie) {周围的逻辑是否正常?)
标签: php curl cookies laravel-5.2