TwitterOAuth无法验证我的Python命令行工具
我在挫折中度过了数小时,现在我有了这样一个问题:TwitterOAuth无法验证我的Python命令行工具,python,twitter,oauth,Python,Twitter,Oauth,我在挫折中度过了数小时,现在我有了这样一个问题: import requests, json, urllib import time import string, random from hashlib import sha1 import hmac, binascii def twitterIDGenerator(length): toRet = "" for i in range(0, length): toRet = toRet + random.cho
import requests, json, urllib
import time
import string, random
from hashlib import sha1
import hmac, binascii
def twitterIDGenerator(length):
toRet = ""
for i in range(0, length):
toRet = toRet + random.choice(string.hexdigits)
return toRet
def twitterSignatureGenerator(baseString, keyString):
hashed = hmac.new(keyString, baseString, sha1)
return binascii.b2a_base64(hashed.digest()).rstrip('\n')
OAUTH_CONSUMER_KEY = ''
OAUTH_NONCE = twitterIDGenerator(32)
OAUTH_SIGNATURE_METHOD = 'HMAC-SHA1'
OAUTH_TIMESTAMP = str(int(time.time()))
OAUTH_VERSION = '1.0'
# Get request token from Twitter
request_tokenURL = 'https://api.twitter.com/oauth/request_token'
request_tokenParameterString = ("oauth_consumer_key=" + OAUTH_CONSUMER_KEY +
"&oauth_nonce=" + OAUTH_NONCE + "&oauth_signature_method=" +
OAUTH_SIGNATURE_METHOD + "&oauth_timestamp=" + OAUTH_TIMESTAMP +
"&oauth_version=" + OAUTH_VERSION)
request_tokenSigBaseString = ("POST&https%3A%2F%2Fapi.twitter.com%2Foauth%2Frequest_token&" +
urllib.quote(request_tokenParameterString))
request_tokenSignature = twitterSignatureGenerator(request_tokenSigBaseString,
'[REDACTED consumer secret key]')
request_tokenHeaders = {'oauth_nonce': OAUTH_NONCE,
'oauth_callback': 'oob',
'oauth_signature_method': OAUTH_SIGNATURE_METHOD,
'oauth_timestamp': OAUTH_TIMESTAMP,
'oauth_consumer_key': OAUTH_CONSUMER_KEY,
'oauth_signature': urllib.quote(request_tokenSignature),
'oauth_version': OAUTH_VERSION}
request_tokenResponse = requests.post(request_tokenURL, headers=request_tokenHeaders)
print request_tokenResponse.text
到目前为止,它应该返回一个请求令牌,这样我就可以让我的用户访问PIN网站,这样我就可以获得访问令牌。但我刚刚从Twitter上得到“验证oauth签名和令牌失败”
一个可能的原因是错误的URL编码。我发现Twitter需要RFC3986编码。在Python中有没有实现这一点的方法?如果是,我是否应该仅在当前使用urllib.quote的两个位置执行此操作?我的oauth_签名生成正确吗
非常复杂。根据我在perl中实现它时的记忆,文档实际上非常明确。您是否检查了他们使用的输入是否相同,您是否得到了相同的签名和请求?请注意一个要点:
urllib.quote
可能无法仅转义它们希望您转义的字符:还有用于OAuth的Python库: