Есть несколько API-интерфейсов, которые я пытаюсь получить для захвата данных в PHP. Все они используют авторизацию OAuth, и я не могу, чтобы жизнь меня поняла.
Если я сделаю запрос file_get_contents
или file_get_contents
запрос данных с использованием URL-адреса API, очевидно, он запрашивает у меня авторизацию.
Мой вопрос: как инициализировать это авторизацию с помощью OAuth?
У меня есть потребительский ключ, секрет потребителя, токен OAuth и секрет токена OAuth. Один из API сказал, что мне нужно включить правильный заголовок OAuth с моим запросом, то есть:
Authorization: OAuth
oauth_consumer_key="key",
oauth_token="token",
oauth_signature_method="HMAC-SHA1",
oauth_signature="f922O9A2W5mFwDgiDvZbTSMK%2FPY%3D",
oauth_timestamp="157131220",
oauth_nonce="90922def48616d6d65724c61686176",
oauth_version="1.0"
Но я понятия не имею, как правильно закодировать этот заголовок в PHP.
Я попытался с header()
в верхней части моего PHP-скрипта или с помощью параметра контекста в моем запросе file_get_contents
. Я тоже посмотрел в скрученные заголовки.
Я просто не могу понять.
Я чувствую, что мне не хватает чего-то очевидного, любой совет будет очень благодарен!
Я выполнил инструкции (https://dev.twitter.com/oauth/overview/authorizing-requests), так как это был их API, к которому я пытался получить доступ в то время. В то время там было не так. Это было urlencoding на шаге 2.1. Теперь это может быть иначе.
вы пробовали использовать cURL для запроса? я считаю это немного более прямым, чем file_get_contents()
try
$headers = array(
Authorization => OAuth
oauth_consumer_key => "key",
oauth_token => "token",
oauth_signature_method => "HMAC-SHA1",
oauth_signature => "f922O9A2W5mFwDgiDvZbTSMK%2FPY%3D",
oauth_timestamp => "157131220",
oauth_nonce => "90922def48616d6d65724c61686176",
oauth_version => "1.0" );
curl_setopt($cURL, CURLOPT_URL, $url);
curl_setopt($cURL, CURLOPT_NOBODY, true);
curl_setopt($cURL, CURLOPT_POST, true);
curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
curl_setopt($cURL, CURLOPT_POSTFIELDS, $data);
curl_setopt($cURL, CURLOPT_HEADER, true);
curl_setopt($cURL, CURLINFO_HEADER_OUT, true);
curl_setopt($cURL, CURLOPT_NOBODY, true);
curl_setopt($cURL, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($cURL);
не слишком уверен в формате массива, но что-то похожее