我正在尝试使用PHP的cURL从我的Reddit帐户中获取一个提要。因此,我需要保留我的cookie,目前我正在尝试使用Netscape格式的cookies.txt文件来完成这个任务,但是这些文件并没有应用到页面中。我想我一定是在做傻事。
最终的结果,我希望得到的页面自动登录到Reddit之前,我显示,但我希望学习之前,我跳到更复杂的事情。
<?php
//format cookies.txt file by adding semi colons to the end of new lines if they aren't already there and removing colons added to #'s
$cookies = file_get_contents('.\cookies.txt');
$cookies = str_replace("\n",";\n",$cookies);
$cookies = str_replace("#;","#",$cookies);
$cookies = str_replace(";;",";",$cookies);
file_put_contents("./cookies.txt", $cookies);
//set user agent and url + initiate
$user_agent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36";
$url = 'http://www.reddit.com';
$c = curl_init($url);
//My options
$options = array(
CURLOPT_CUSTOMREQUEST =>"GET", //set request type post or get
CURLOPT_POST =>false, //set to GET
CURLOPT_USERAGENT => $user_agent, //set user agent
CURLOPT_COOKIEFILE =>".\cookies.txt", //set cookie file
CURLOPT_COOKIEJAR =>".\cookies.txt", //set cookie jar
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => false, // don't return headers
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_ENCODING => "", // handle all encodings
CURLOPT_AUTOREFERER => true, // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect
CURLOPT_TIMEOUT => 120, // timeout on response
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
);
curl_setopt_array( $c, $options );
//curl_setopt(... other options you want...)
$html = curl_exec($c);
if (curl_error($c))
die(curl_error($c));
// Get the status code
$status = curl_getinfo($c, CURLINFO_HTTP_CODE);
curl_close($c);
//get html
echo $html;
?>发布于 2015-04-04 02:41:41
这里有几个问题。让我们一个接一个地对付他们。
First,您需要这个脚本将您登录到reddit中。这大概是一个web访问的PHP脚本,您的目标是在访问此页面时在浏览器中设置cookie。
问题1:如果cookie值特定于创建cookie的IP地址(可能还有其他因素),这可能是不可能的。我不熟悉reddit如何处理会话,所以我无法回答这个问题。如果cookie值可以在任何机器之间共享,那么您就可以选择了。
问题2:您没有向浏览器发送任何标头(包括cookie),但我怀疑您还没有达到这一点。当您到达那里时,您可以使用header()或setcookie()来完成这个任务。
第二个,您的代码有一些语法问题。
\作为目录分隔符。这是有问题的,因为单个反斜杠本身就是转义字符。虽然\前面的字符不是转义的(不包括\n),但这不是一个好习惯。')和双引号(").在PHP中,这具有重要意义。有关更多信息,请阅读有关字符串的文档。/)和反斜杠(\)。所以现在我们需要确定一些事情,如果您提供cookie文件,它将帮助我们调试。置乱值,所以我们不能劫持您的会话.
发布于 2015-04-04 02:34:06
cURL可以自己处理cookie文件的创建和处理。我建议删除您在//set user agent and url + initiate之前编写的代码。下一步是确保cookies.txt存在,并且运行脚本的用户拥有访问该文件的适当权限(如果您在Linux上运行该文件,您应该追求760、770或660 )。
https://stackoverflow.com/questions/29441274
复制相似问题