Php 推特API返回“;“无法验证您的身份”;如果URL中存在参数,则出错
我正在尝试通过OAuth 1.0a加载列表。 如果URL没有任何参数,例如: 作品:Php 推特API返回“;“无法验证您的身份”;如果URL中存在参数,则出错,php,json,api,url,twitter,Php,Json,Api,Url,Twitter,我正在尝试通过OAuth 1.0a加载列表。 如果URL没有任何参数,例如: 作品:https://api.twitter.com/1.1/friends/list.json 不起作用:https://api.twitter.com/1.1/friends/list.json?cursor=-1&skip\u status=true&include\u user\u entities=false 如果向其添加参数,则返回以下错误: 无法验证您的身份 原因可能是什么? 我的代码: 看起来您正在=符
https://api.twitter.com/1.1/friends/list.json
不起作用:https://api.twitter.com/1.1/friends/list.json?cursor=-1&skip\u status=true&include\u user\u entities=false
如果向其添加参数,则返回以下错误:
无法验证您的身份
原因可能是什么?
我的代码:
看起来您正在=
符号上使用rawurlencode
。将其转换为%3D
因此,当您需要cursor=-1
时,您将获得cursor%3D-1
也许可以尝试简化函数,这样就不会对=
?进行编码。这是获取用户信息的示例代码
require_once('oauth/twitteroauth.php');
$oauth_token='YOUR OAUTH TOKEN';
$oauth_token_secret='YOUR SECRET KEY';
function getConnectionWithAccessToken($oauth_token, $oauth_token_secret) {
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $oauth_token, $oauth_token_secret);
return $connection;
}
$connection = getConnectionWithAccessToken($oauth_token, $oauth_token_secret);
$content = $connection->get('account/verify_credentials');
url也有参数,因此您应该尝试遵循以下步骤(在函数buildBaseString中):
将HTTP方法转换为大写,并将输出字符串设置为该值
将“&”字符追加到输出字符串李>
百分比编码URL并将其附加到输出字符串
将“&”字符追加到输出字符串
百分比编码参数字符串并将其附加到输出
绳子
(摘自:)
现在您有了这样一个编码的基本url:
GET&https%3A%2F%2Fapi.twitter.com%2F1.1%2Ffriends%2Flist.json%3Fcursor%3D-1%26skip_status%3Dtrue%26include_user_entities%3Dfalse&oauth_consumer_key%3Dremoved%26oauth_nonce%3D1423633315%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1423633315%26oauth_token%3Dremoved%26oauth_version%3D1.0
也许你必须试着做到这一点:
GET&https%3A%2F%2Fapi.twitter.com%2F1.1%2Ffriends%2Flist.json&cursor%3D-1%26skip_status%3Dtrue%26include_user_entities%3Dfalse%26oauth_consumer_key%3Dremoved%26oauth_nonce%3D1423633315%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1423633315%26oauth_token%3Dremoved%26oauth_version%3D1.0
您需要在OAuth头中包含参数。最好的方法是将它们从URL中分离出来
$params = array(
"cursor" => -1,
"skip_status" => "true",
"include_user_entities" => "false"
);
现在使用基本url构建基本字符串
$url = 'https://api.twitter.com/1.1/friends/list.json'
$oAuthHeaders = $oauth + $params;
$base_info = buildBaseString($url, 'GET', $oAuthHeaders);
$composite_key = rawurlencode($consumer_secret) . '&' . rawurlencode($oauthTokenSecret);
$oauth_signature = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true));
$oAuthHeaders['oauth_signature'] = $oauth_signature;
最后,使用其他参数创建URL字符串:
if ($params) {
$finalURL = "$url?";
foreach ($params as $key=>$param) {
$finalURL .= rawurlencode($key) . "=" . rawurlencode($param) . "&";
}
$finalURL = substr($finalURL, 0, strlen($finalURL) - 1);
}
现在您已准备好发送整个包裹:
$header = array(buildAuthorizationHeader($oAuthHeaders), 'Expect:');
这对你有帮助吗?也许:
$header = array(buildAuthorizationHeader($oAuthHeaders), 'Expect:');