【问题标题】:Issue with deviantart authentication (PHP)deviantart 身份验证问题(PHP)
【发布时间】:2016-11-26 14:25:17
【问题描述】:

我正在尝试通过他们的oauth2 mechanism 连接到 deviantart。我确实获得了获取访问令牌的代码,但是在尝试通过 file_get_contents 获取访问令牌时出现了一些奇怪的 404 错误。但是,当我复制 url 时,我可以根据需要获取访问令牌。有这个。与标题设置有关吗?这是获取访问令牌的代码:

function getAccessToken($code) {
        $url = "https://www.deviantart.com/oauth2/token";
        $data = array();
        $data["grant_type"] = "authorization_code";
        $data["client_id"] = $this->client_id;
        $data["client_secret"] = $this->client_secret;
        $data["redirect_uri"] = $this->redirect_uri;
        $data["code"] = $code;
        return $this->sendToDeviantArt($url, $data);
}

private function sendToDeviantArt($url=null, $data=array()) {
        $options = array(
            'http' => array(
                'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
                'method'  => 'POST',
                'content' => http_build_query($data),
            ),
        );
        $context  = stream_context_create($options);
        $result = file_get_contents($url, false, $context);
        return $result;
}

【问题讨论】:

    标签: php oauth-2.0


    【解决方案1】:

    我花了几个小时,但显然,deviantart 想要设置 USER_AGENT。所以为了记录,这完美无缺(注意 user_agent 变量)

        private function sendToDeviantArt($url=null, $data=array()) {
            $options = array(
                'http' => array(
                    'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
                    'method'  => 'POST',
                    'content' => http_build_query($data),
                    'user_agent' => $_SERVER["HTTP_USER_AGENT"]
                ),
            );
            $context  = stream_context_create($options);
            $result = file_get_contents($url, false, $context);
            return $result;
        }
    

    编辑:作为记录,我们为一些异常函数编写了一个包装器并上传了a small library on github.

    【讨论】:

      【解决方案2】:

      这对我来说也很痛苦。感谢 Jan 对用户代理的提醒。只是想我会提供一个 curl 替代方案,因为这就是我正在使用的。显然可以根据您的内心内容进行编辑,但是如果您通过它传递一个 deviantART api url,则此方法有效。

      function curl($url) {
        // Initiate curl
        $ch = curl_init();
        // Disable SSL verification
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        // Will return the response, if false it print the response
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        // Set the user agent
        curl_setopt($ch,CURLOPT_USERAGENT,$_SERVER["HTTP_USER_AGENT"]);
        // Set the url
        curl_setopt($ch, CURLOPT_URL,$url);
        // Execute
        $result=curl_exec($ch);
        // Closing
        curl_close($ch);
        // Will dump a beauty json :3
        return $result;
      }
      

      ```

      获取访问令牌的示例用法:

      $json = json_decode(curl("https://www.deviantart.com/oauth2/token?response_type=code&client_id=0&client_secret=0&grant_type=client_credentials"), true);
      $json["access_token"];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-17
        • 2013-07-23
        相关资源
        最近更新 更多