使用OAuth通过PHP进行API授权

时间:2015-01-08 21:14:26

标签: php api curl oauth header

我试图访问PHP中的几个API。他们都使用OAuth授权,但我无法解决这个问题。

如果我使用API​​的网址发出CURL请求或file_get_contents数据请求,显然它会要求我授权。

我的问题是,如何使用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中实际编写这个头文件 我在PHP脚本的顶部尝试使用header()或在我的file_get_contents请求中使用了context参数。我也查看了卷曲标题。

我无法弄明白。
我觉得我错过了一些明显的东西,任何建议都会非常感激!

2 个答案:

答案 0 :(得分:1)

我按照(https://dev.twitter.com/oauth/overview/authorizing-requests)的说明操作,因为它是我当时尝试访问的API。当时有一件事是错的。这就是步骤2.1中的urlencoding。现在可能会有所不同。

答案 1 :(得分:0)

您是否尝试过使用cURL来处理请求?我发现它比file_get_contents()尝试

更直截了当
$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);

不太确定数组的格式,但类似的东西