Я пытаюсь получить токен без аутентификации из текущего API Vimeo v3, чтобы использовать его, чтобы получить простой список моих собственных видео на моем собственном сайте. Я использую функцию WordPress HTTP API ‘wp_remote_post’ для генерации правильного http-запроса.
Согласно Vimeo, это правильный способ сделать это, и это делается с помощью запроса POST. Вот аргументы:
HTTP Method: POST
HTTP URL: api.vimeo.com/oauth/authorize/client
HTTP Headers: Authorization: basic, base64_encode( "$client_id: $client_secret" )
Request Body: grant_type=client_credentials&scope=public%20private
и получать
[body] => {"error":"You must provide a valid authenticated access token."}
[raw] => HTTP/1.1 401 Authorization Required
Почему Vimeo запрашивает действительный токен аутентифицированного доступа для явно не аутентифицированного вызова? Я предоставил действительный идентификатор клиента и секрет клиента из моего приложения Vimeo, используя инструкции Vimeo для Получать неаутентифицированное токен доступа. Я отправляю запрос из моего местного окружения.
Я проверил подобный вопрос Как сгенерировать токен неаутентифицированного доступа Vimeo? и следовали всему изложенному там. Никаких кубиков, и я пытался делать это часами.
Vimeo API, кажется, принимает параметры только как часть строки запроса, не как часть объекта HTTP POST («тело», «данные» или другие).
Только когда я закодировал параметры непосредственно в URL, вместо того, чтобы передавать их как параметры в объекте post, публикация работала.
Работает:
$url = 'https://api.vimeo.com/oauth/authorize/client?grant_type=client_credentials&scope=public%20private';
$auth = base64_encode( $developer_key . ':' . $secret_key );
$headers = array(
'Authorization' => 'Basic ' . $auth,
'Content-Type' => 'application/json'
);
$args = array(
'headers' => $headers
);
$response = wp_remote_post( $url, $args );
Не работает:
$url = 'https://api.vimeo.com/oauth/authorize/client';
$auth = base64_encode( $developer_key . ':' . $secret_key );
$data = array(
'grant_type' => 'client_credentials',
'scope' => 'public private'
);
$headers = array(
'Authorization' => 'Basic ' . $auth,
'Content-Type' => 'application/json'
);
$args = array(
'headers' => $headers,
'data' => $data
);
Хммм. Начиная с WordPress 4.6, класс WP_HTTP теперь построен на Запросы Райан МакКью.
Так что, похоже, мой вопрос на самом деле также вопрос о том, как wp_remote_post () создает запрос. Кажется, что нет способа передать параметры в функцию и привести их в строковое значение в URL.
Других решений пока нет …