アートをさまざまなプラットフォームに一度に時間通りに投稿するのに役立つアプリケーションを作成しようとしています。
だから私がやろうとしているのは、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;
}
?>