Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Deviceart中的用户身份验证_Php_Http_Oauth 2.0_Deviantart Api - Fatal编程技术网

Php Deviceart中的用户身份验证

Php Deviceart中的用户身份验证,php,http,oauth-2.0,deviantart-api,Php,Http,Oauth 2.0,Deviantart Api,我正在尝试制作一个应用程序,它可以帮助我在不同的平台上以一种定时的方式同时发布艺术作品 所以我要做的就是使用PHP中的身份验证代码从DeviantArt获取身份验证代码,然后我将获取该代码并将其放到我的应用程序中,这样我就可以使用它在我的帐户上获取访问令牌和后期艺术 我编写了下面的PHP代码来执行GET请求,它成功地将我发送到身份验证页面。但当我登录到我的帐户时,它会给我一个403禁止访问错误。API要求我发布我的应用程序并将OAtuth2重定向URI列入白名单,以及 下面是poster/as

我正在尝试制作一个应用程序,它可以帮助我在不同的平台上以一种定时的方式同时发布艺术作品

所以我要做的就是使用PHP中的身份验证代码从DeviantArt获取身份验证代码,然后我将获取该代码并将其放到我的应用程序中,这样我就可以使用它在我的帐户上获取访问令牌和后期艺术

我编写了下面的PHP代码来执行GET请求,它成功地将我发送到身份验证页面。但当我登录到我的帐户时,它会给我一个403禁止访问错误。API要求我发布我的应用程序并将OAtuth2重定向URI列入白名单,以及

下面是poster/assets/php/authDeviantArt.inc.php中的代码:


下面是URI中的文件,DeviceArt应该将其重定向给我(poster/requestAuthorization.php):


授权
授权设备
更新01:我已经从白名单和重定向URI中的URI中删除了端口,并且在我登录时仍然会出现403错误。我还发现,如果我给redirect_uri属性一个未列入白名单的uri,它将显示一个错误页面,而不是要求我登录。我还试图让它将我重定向到另一个网页(youtube),但没有成功(仍然给我403错误)

更新02:其中一个答案表明错误可能是因为我需要发送一个标题中带有“用户代理”的请求并对其进行压缩。现在我的代码是这样的:

<?php
if(isset($_POST["submit"])){
    $opts = array(
        'http' => array(
            'method'=>"GET",
            'header'=>"User-agent: ".$_SERVER["HTTP_USER_AGENT"]
        )
    );

    $context = stream_context_create($opts);
    $result = file_get_contents("https://www.deviantart.com/oauth2/authorize?response_type=code&client_id=9685&redirect_uri=http://myipaddress/poster/requestAuthorization.php", false, $context);
    echo $result;
}
?>

上面的代码仍然不能解决问题,可能是因为我需要“压缩”我的HTTP GET请求?我是个新手,我试着做一些研究,但我不知道怎么做

更新03:感谢下面的一个答案,我发现了如何压缩我的请求。不幸的是,它不起作用。我会将电子邮件发送给DeviantArt的支持团队,看看他们是否能帮助我。目前我的代码如下:

<?php
    if(isset($_POST["submit"])){
        $opts = array(
            'http' => array(
                'method'=>"GET",
                'header'=>"User-Agent: ".$_SERVER["HTTP_USER_AGENT"]."\r\n".
                        "Accept-Encoding: gzip\r\n"
            )
        );

        $context = stream_context_create($opts);
        $result = file_get_contents("compress.zlib://https://www.deviantart.com/oauth2/authorize?response_type=code&client_id=9685&redirect_uri=http://myipaddress/poster/requestAuthorization.php", false, $context);
        echo $result;
    }
?>

您可能需要阅读并取消/取消其中的成功示例

在我看来,这些变量是必需的:

curl https://www.deviantart.com/oauth2/token \
-d grant_type=authorization_code \
-d client_id=0 \
-d client_secret=mysecret \
-d redirect_uri=http://myapp.example/cb \
-d code=1234

成功范例 根据该示例,可能您只是缺少
client\u secret
变量,如果您愿意,可以添加
grant\u type

<?php
if(isset($_POST["submit"])){
    $result = file_get_contents("https://www.deviantart.com/oauth2/authorize?response_type=code&client_id=9685&redirect_uri=http://myipaddress:80/poster/requestAuthorization.php", false);
    echo $result;
} ?>

我不知道您是否这样做,但如果您不发送用户代理,并且在请求中不使用压缩,您可能会得到403。 IIRC在过去的某个时候,他们在没有事先通知的情况下悄悄地开始实施这两项措施。一切都突然失败很有趣

引用

如果您收到403个包含HTML响应而非JSON的错误,请确保您的客户端正在发送用户代理标头,并对请求使用HTTP压缩,我们将拒绝任何不符合此要求的请求


我发现了问题所在。 显然,我不应该获取身份验证页面的内容并在页面中回响。相反,我应该将用户重定向到身份验证页面

<?php
    if(isset($_POST["submit"])){
        header("Location: https://www.deviantart.com/oauth2/authorize?response_type=code&client_id=9685&redirect_uri=http://myipaddress/poster/requestAuthorization.php");
    }
?> 


感谢您的回复。您向我展示的第一个代码是请求一个访问令牌,我可以使用它将内容发布到DeviceArt。要获取访问令牌,我需要身份验证代码(您可以看到其中一个变量是“code”)。要获取代码,我需要首先从您发布的链接执行用户授权步骤。当我执行GET时,它会将我发送到页面以登录到我的帐户,当我这样做时,它会给我一个403,而不是用我需要的代码重定向requestAuthorization.php。这就是问题所在。我已经删除了端口,当我登录时,它仍然给我403错误。我还发现,如果我给redirect_uri属性一个未列入白名单的uri,它将显示一个错误页面,而不是要求我登录。所以我的结论是,这个错误不是因为白名单。谢谢你的回复。检查问题中的更新02。您可以通过将标题字段“Accept Encoding”设置为“gzip”来启用压缩。也许这个问题及其答案可能会有所帮助。我发现了问题。它与链接无关,但现在我知道了在需要时如何执行压缩GET请求。谢谢你的帮助!
{
  "expires_in": 3600,
  "status": "success",
  "access_token": "Alph4num3r1ct0k3nv4lu3",
  "token_type": "Bearer"
  "refresh_token": "3ul4vn3k0tc1r3mun4hplA",
  "scope": "basic"
}
<?php
if(isset($_POST["submit"])){
    $result = file_get_contents("https://www.deviantart.com/oauth2/authorize?response_type=code&client_id=9685&redirect_uri=http://myipaddress:80/poster/requestAuthorization.php", false);
    echo $result;
} ?>
{"error":"invalid_request","error_description":"Request field validation failed.","error_details":{"response_type":"response_type is required","client_id":"client_id is required","redirect_uri":"redirect_uri is required"},"status":"error"}
<?php
    if(isset($_POST["submit"])){
        header("Location: https://www.deviantart.com/oauth2/authorize?response_type=code&client_id=9685&redirect_uri=http://myipaddress/poster/requestAuthorization.php");
    }
?>