2015-08-01 2 views
2

Я пытаюсь подключиться к deviantart через их oauth2 mechanism. Я получаю код для получения токена доступа, но затем я получаю странную ошибку 404 при попытке получить токен доступа через file_get_contents. Однако, когда я копирую URL-адрес, я могу получить маркер доступа по желанию. Имеет это sth. делать с настройками заголовка? Это код, чтобы получить маркер доступа:Проблема с аутентификацией deviantart (PHP)

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

ответ

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

EDIT: Для записи, мы программировали оболочку для некоторых функций DeviantArt и загрузили a small library on github.

0

Это была боль для меня тоже. Спасибо Ян за хедз-ап в пользовательском агенте. Просто подумал, что я предлагаю альтернативу скручиванию, так как это то, что я использовал для этого. Очевидно, редактируйте контент ваших сердец, но это работает, если вы передадите через него 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"]; 
Смежные вопросы