2

アートをさまざまなプラットフォームに一度に時間通りに投稿するのに役立つアプリケーションを作成しようとしています。

だから私がやろうとしているのは、PHPのAPIから認証コードグラントを使用してDeviantArtから認証コードを取得することです。次に、そのコードを取得してアプリケーションに配置し、それを使用してアクセストークンを取得できるようにします私のアカウントにアートを投稿してください。

以下の PHP コードを作成して、https://www.deviantart.com/oauth2/authorizeへの GET リクエストを実行すると、認証ページに正常に送信されました。しかし、自分のアカウントにログインすると、403 Forbidden Access エラーが表示されます。この API では、アプリを公開し、OAtuth2 リダイレクト URI をホワイトリストに登録する必要がありますが、 私は既にそれを行っています。

poster/assets/php/authDeviantArt.inc.phpのコードは次のとおりです。

<?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;
} ?>

DeviantArt がリダイレクトする URI のファイル ( poster/requestAuthorization.php ) は次のとおりです。

<?php
if(isset($_GET["code"])){
    echo $_GET["code"];
}
?>



<html>
    <head>
        <title>Authorization</title>
        <meta charset="utf-8">
    </head>
    <body>
        <form action="assets/php/authDeviantArt.inc.php" method="POST">
            <button type="submit" name="submit">Authorization DeviantArt</button>
        </form>
    </body>
</html>

更新 01:ホワイトリストと redirect_uri の両方で URI からポートを削除しましたが、ログイン時に 403 エラーが引き続き発生します。また、redirect_uri プロパティにホワイトリストに登録されていない URI を指定すると、ログインを要求する代わりにエラーページが表示されます。また、別の Web ページ (YouTube) にリダイレクトするように要求しようとしましたが、成功しませんでした (まだ 403 エラーが表示されます)。

更新 02:回答の 1 つは、ヘッダーに「USER-AGENT」を含むリクエストを送信して圧縮する必要があるため、エラーが発生した可能性があることを示唆しています。今私のコードは次のようになります:

<?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:以下の回答の 1 つにより、リクエストを圧縮する方法がわかりました。残念ながら、うまくいきませんでした。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;
    }
?>
4

3 に答える 3