我在尝试对 API 进行身份验证时使用 PECL OAuth。
示例代码:
<?php
$requestUri = 'http://openapi.lovefilm.com/oauth/request';
$consumerKey = 'MYCONSUMERKEY';
$consumerSecret = 'MYSECRET';
$oauth = new OAuth($consumerKey, $consumerSecret);
$oauth->setAuthType(OAUTH_AUTH_TYPE_AUTHORIZATION);
$oauth->setVersion('1.0');
$oauth->setTimestamp(mktime());
$oauth->enableDebug();
try
{
$req = $oauth->getRequestToken($requestUri, 'oob');
var_dump($req);
}
catch(OAuthException $e)
{
print '<pre>';
var_dump($e);
var_dump($oauth->debugInfo);
}
?>
他们提供的规范 (http://developer.lovefilm.com/- registration req) 说我应该发布一个类似于下面的请求:
POST /oauth/request_token HTTP/1.1 Host: openapi.lovefilm.com Authorization: OAuth oauth_callback="http%3A%2F%2Fyour-service.com%2Fsuccess", oauth_consumer_key="2blu7svnhwkzw29zg7cwkydn", oauth_nonce="5f38dbc02a97567965f14d", oauth_signature="sPSVmqN%2FXu9k0wlZxF0PqPZwYGo%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1278499295", oauth_version="1.0"
但是当我使用方法时:
$oauth->setAuthType(OAUTH_AUTH_TYPE_AUTHORIZATION);
生成的请求始终是 GET。
有人能帮忙吗?
谢谢,
本
最佳答案
是的,根据OAuth Specification , the request for Temporary Credentials (AKA "Request Token")和 the request for Token Credentials (AKA "Access Token")必须作为 HTTP POST
请求提交,但 PECL OAuth 扩展似乎持续使用 GET
用于 getRequestToken()
和 getAccessToken( )
...默认情况下。
有an $auth_type
parameter to OAuth::__construct()
接受 one of the following values :
OAUTH_AUTH_TYPE_AUTHORIZATION
-- 在请求的 HTTPAuthorization
header 中提交 OAuth 参数(默认情况下使用GET
请求)。<OAUTH_AUTH_TYPE_URI
-- 在请求 URI 中提交 OAuth 参数(即GET
请求中的查询参数)。OAUTH_AUTH_TYPE_FORM
-- 提交 OAuth 参数作为 HTTP POST 正文的一部分(在POST
请求中)。OAUTH_AUTH_TYPE_NONE
-- 根本不提交 OAuth 参数,即“NoAuth”请求(默认情况下也是GET
)。
根据我的经验,fetch()
、getRequestToken()
和 getAccessToken()
方法都遵循此设置,which can also be set with OAuth::setAuthType()
在对象的实例上。实际上,我在表演舞蹈时将身份验证类型设置为 OAUTH_AUTH_TYPE_FORM
,然后重置为默认值 -- OAUTH_AUTH_TYPE_AUTHORIZATION
-- 以发出资源请求。
关于php - OAUTH 使用 PHP 的 PECL OAUTH - 使用方法 getRequestToken() 时不能使用 POST?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4154182/