cURL按照重定向登录表单

时间:2015-05-31 02:47:56

标签: php authentication redirect curl

我正在尝试使用PHP cURL登录网站并转到特定网址以检索其内容。

这是我要查看的页面:https://dev-portal.getpebble.com/developer

但是,此页面要求用户登录,登录页面已打开:https://auth.getpebble.com/users/sign_in

奇怪的是,登录页面有一个隐藏值“authenticity_token”,必须与表单一起提交。所以我目前的流程是:

  1. cURL获取登录页面的内容。 (在auth url上调用cURL)
  2. 从页面获取“真实性令牌”(检索发布数据的令牌)
  3. cURL提交到具有真实性令牌+凭据的登录页面(在带有发布数据的Auth url上调用cURL)
  4. 这个图片中的工作原理(来自exec的卷曲内容的截图):http://i.gyazo.com/4eccb78bf18f72f1da65bc9d8967541e.png

    但是,此过程将我带到:https://auth.getpebble.com/me,我现在需要cURL使用我已验证的会话将我带到https://dev-portal.getpebble.com/developer。我已经尝试保存cookie但它似乎不起作用。

    在上面的第3步之后,我尝试在https://dev-portal.getpebble.com/developer页面上调用cURL,但我一直被重定向到“localhost / users / auth / pebble”(这甚至不存在?我假设cURL是导致页面重定向?)如果我在重定向发生之前取消重定向,我会得到未经身份验证的页面:http://i.gyazo.com/218e00c262651017df4dcc1927def87f.png

    以下是我创建cURL请求的代码。

        private function cURL($url, $postData = false)
    {
    
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
        curl_setopt($ch, CURLOPT_FORBID_REUSE, TRUE);
        curl_setopt($ch, CURLOPT_FRESH_CONNECT, FALSE);
        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
        curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie);
        curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookie);
        curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
        if ($postData)
        {
            curl_setopt($ch, CURLOPT_POST, TRUE);
            curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));
        }
    
        $content = $this->content = curl_exec($ch);
    
        echo $content;
    
        curl_close($ch);
        return $content;
    }
    

1 个答案:

答案 0 :(得分:1)

原来cookie是在不同的页面而不是https://dev-portal.getpebble.com/developer上生成的,因此该页面会创建一个无效的会话。

我设法使用https://dev-portal.getpebble.com/users/auth/pebble代替https://dev-portal.getpebble.com/developer来修复它,虽然重定向后会将我带到经过身份验证的/开发者页面。