0

[注意:以下所有 oauth 令牌/秘密都是随机创建的;它们不是我的实际令牌/秘密]

 
curl -o /tmp/test.txt 'https://api.twitter.com/oauth/request_token?
oauth_timestamp=1345141469&
consumer_key=UEIUyoBjBRomdvrVcUTn&oauth_access_token_secret=YePiEkSDFdYAOgscijMCazcSfBflykjsEyaaVbuJeO&oauth_access_token=47849378%2drZlzmwutYqGypbLsQUoZUsGdDkVVRkjkOkSfikNZC&oauth_nonce=1345141469&
consumer_secret=rUOeZMYraAapKmXqYpxNLTOuGNmAQbGFqUEpPRlW&
oauth_version=1%2e0&
oauth_signature_method=HMAC%2dSHA1&oauth_signature=H0KLLecZNAAz%2bXoyrPRiUs37X3Zz%2bAcabMa5M4oDLkM' 

[为了清楚起见,我添加了换行符;实际命令是一行]

假设所有其他数据都是有效的,为什么上面的命令会产生“无法验证 oauth 签名和令牌”(即使我使用我的真实数据)?

特别是,我的签名“H0KLLecZNAAz%2bXoyrPRiUs37X3Zz%2bAcabMa5M4oDLkM”是无效的,还是我做的事情根本上是错误的。

我用来生成这个的程序:

#!/bin/perl
使用摘要::SHA;

%twitter_auth_hash = (
"oauth_access_token" => "47849378-rZlzmwutYqGypbLsQUoZUsGdDkVVRkjkOkSfikNZC",
"oauth_access_token_secret" => "YePiEkSDFdYAOgscijMCazcSfBflykjsEyaaVbuJeO",
"consumer_key" => "UEIUyoBjBRomdvrVcUTn",
"consumer_secret" => "rUOeZMYraAapKmXqYpxNLTOuGNmAQbGFqUEpPRlW"
);

# 如果未注释,则拉取我的实际数据
# 需要“bc-private.pl”;

$twitter_auth_hash{"oauth_signature_method"} = "HMAC-SHA1";
$twitter_auth_hash{"oauth_version"} = "1.0";
$twitter_auth_hash{"oauth_timestamp"} = time();
$twitter_auth_hash{"oauth_nonce"} = time();

对于 $i (keys %twitter_auth_hash) {
  推(@str,"$i=".urlencode($twitter_auth_hash{$i}));
}

$str = join("&",@str);

#要签名的东西
$url = "获取 $str";

# 签名
$sig = urlencode(Digest::SHA::hmac_sha256_base64($url, "rUOeZMYraAapKmXqYpxNLTOuGNmAQbGFqUEpPRlW&YePiEkSDFdYAOgscijMCazcSfBflykjsEyaaVbuJeO"));

# 完整的 URL 包括签名
$furl = "https://api.twitter.com/oauth/request_token?$str&oauth_signature=$sig";
# system("curl -o /tmp/testing.txt '$furl'");


打印 "FURL: $furl\n";
打印“STR:$str\n”;
打印 "SIG: $sig\n";

子网址代码{
  我的($str)=@_;
  $str=~s/([^a-zA-Z0-9])/"%".unpack("H2",$1)/iseg;
  $str=~s/ /\+/isg;
  返回 $str;
}

注意:我意识到失败还有许多其他可能的原因,但当前的问题是:我是否正确发送了参数并且我是否正确计算了签名。

4

1 回答 1

0

Twitter 要求您为请求令牌执行 POST

于 2012-08-16T19:26:52.130 回答