首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用PHP的cURL获取Reddit提要?

如何使用PHP的cURL获取Reddit提要?
EN

Stack Overflow用户
提问于 2015-04-04 00:00:19
回答 2查看 527关注 0票数 0

我正在尝试使用PHP的cURL从我的Reddit帐户中获取一个提要。因此,我需要保留我的cookie,目前我正在尝试使用Netscape格式的cookies.txt文件来完成这个任务,但是这些文件并没有应用到页面中。我想我一定是在做傻事。

最终的结果,我希望得到的页面自动登录到Reddit之前,我显示,但我希望学习之前,我跳到更复杂的事情。

代码语言:javascript
复制
<?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;
?>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-04 02:41:41

这里有几个问题。让我们一个接一个地对付他们。

First,您需要这个脚本将您登录到reddit中。这大概是一个web访问的PHP脚本,您的目标是在访问此页面时在浏览器中设置cookie。

问题1:如果cookie值特定于创建cookie的IP地址(可能还有其他因素),这可能是不可能的。我不熟悉reddit如何处理会话,所以我无法回答这个问题。如果cookie值可以在任何机器之间共享,那么您就可以选择了。

问题2:您没有向浏览器发送任何标头(包括cookie),但我怀疑您还没有达到这一点。当您到达那里时,您可以使用header()setcookie()来完成这个任务。

第二个,您的代码有一些语法问题。

  • 您正在使用\作为目录分隔符。这是有问题的,因为单个反斜杠本身就是转义字符。虽然\前面的字符不是转义的(不包括\n),但这不是一个好习惯。
  • 尽管如此,您应该使用分离器来代替。
  • 你正在混合单引号(')和双引号(").在PHP中,这具有重要意义。有关更多信息,请阅读有关字符串的文档。
  • 您还在为您的目录路径混合正斜杠(/)和反斜杠(\)。

所以现在我们需要确定一些事情,如果您提供cookie文件,它将帮助我们调试。置乱值,所以我们不能劫持您的会话.

  • 究竟是什么回卷曲呢?
  • 什么是输出到您的浏览器?
  • 何时生成cookie值?饼干可能已经过期了。
票数 2
EN

Stack Overflow用户

发布于 2015-04-04 02:34:06

cURL可以自己处理cookie文件的创建和处理。我建议删除您在//set user agent and url + initiate之前编写的代码。下一步是确保cookies.txt存在,并且运行脚本的用户拥有访问该文件的适当权限(如果您在Linux上运行该文件,您应该追求760、770或660 )。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29441274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档