我发现很多像我这样的问题,遗憾的是没有为我工作的解决方案。我创建了一个抓取网站的功能,但对于某些网站,我需要设置一些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;
}
我试图在存储目录中放入一个空文件,但它没有写入。已检查文件是否可写且是。
答案 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);