【问题标题】:CURL: Maintain session without redirectCURL:保持会话没有重定向
【发布时间】:2014-04-23 10:05:19
【问题描述】:

感觉这可能是一个愚蠢的问题,但在寻找可能性和玩弄价值一段时间后,我似乎仍然无法弄清楚如何做到这一点。

我基本上想做的是从 Rockstar Games Social Club 获取帐户信息。我发现这个网站使用了私有 API。但为了使其工作,它需要与服务器的活动会话。

没有身份验证,API 返回:

{"Portfolio":[{"CharacterName":"Michael","TotalShares":0,"TotalInvested":"$0","DayRange":"N/A","ChangePercent":"N/A","ChangeDollar":"N/A","ChangeDirection":"","Investments":[]},{"CharacterName":"Franklin","TotalShares":0,"TotalInvested":"$0","DayRange":"N/A","ChangePercent":"N/A","ChangeDollar":"N/A","ChangeDirection":"","Investments":[]},{"CharacterName":"Trevor","TotalShares":0,"TotalInvested":"$0","DayRange":"N/A","ChangePercent":"N/A","ChangeDollar":"N/A","ChangeDirection":"","Investments":[]}]}

所以,我正在尝试找到一种方法来完成这项工作。而且我似乎 cURL 将是做到这一点的最佳方式。

但是,我测试过的代码会将我重定向到他们的网站,而不是获取数据,之后我可以调用一个新请求,希望它会起作用。

我的 PHP 代码:

class DownloadJSON {
    public function download($url) {
        return file_get_contents($url);
    }

    public function login($url, $username, $password) {
        $url = "https://socialclub.rockstargames.com/profile/signin";
        $vars = "login-field=". $username ."&password-field=". $password . "&rememberme-field=off";

        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
        $data = curl_exec($ch);

        $me = $this->download($url);

        curl_close($ch);

        echo $me;
    }
}

if(isset($_GET['url'])) {
    if (strlen($_GET['url']) > 0) {
        if ($_GET['action'] == "stocks") {
            $downloadJSON = new DownloadJSON();
            echo $downloadJSON->download($_GET['url']);
        }
        else if ($_GET['action'] == "portfolio"){
            $downloadJSON = new DownloadJSON();
            echo $downloadJSON->login($_GET['url'], $_GET['username'], $_GET['password']);
        }
        else {
            echo json_encode("invalid request");
        }
    }
}

此致, 拉西1

【问题讨论】:

    标签: php session curl


    【解决方案1】:

    您可以尝试设置CURLOPT_COOKIEFILE,以便实际保存cookie 会话。但是,在下一个请求中,您只是在执行 file_get_contents,因此可能会忽略设置的 cookie。

    也尝试使用 CURL 从 API 中检索内容。

    此外,API 可能出于某种原因是私有的。

    【讨论】:

    • 我在较早的阶段尝试过 CURLOTP_COOKIEFILE,但是,CURL 目前正在将整个网站重定向到 Social Club 页面这一事实并不安全。
    猜你喜欢
    • 2012-08-13
    • 2014-09-09
    • 2011-03-13
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多