我所做的更改的概述:
- 我换出
binascii.b2a_base64
了base64.standard_b64enpre
- 我使用该
bytes.depre('ascii')方法将字节转换为字符串。str()似乎将b附加到字符串。 - 我将参数的顺序固定为
hmac.new
-而KEY, MESSAGE
不是MESSAGE, KEY
- 我删除了对
include_entities
in的引用PARAMETER_STRING
-如果您在请求中不使用include_entities(并且我认为对令牌请求没有意义),则不得将其包含在PARAMETER_STRING中 - 我
oauth_callback=oob
在开头添加了PARAMETER_STRING
-除oauth_signature之外的所有oauth参数都必须包含在基本字符串中。 - 我更改了发出请求的部分,以预先创建Request对象,然后添加Authorization标头-您正在将Authorization标头作为HTTP正文发送。
- 为了匹配此更改,我从中删除了结尾的分号
HEADER_TITLE
。 - 我在之后添加了缺少的分号
oauth_callback="oob"
。
请享用!
这是您的代码的固定版本:
import urllib.parse, urllib.request, jsonfrom hashlib import sha1import hmacimport base64import timeimport randomimport sys#Server linksREQUEST_URL = "https://api.twitter.com/oauth/request_token";ACCESS_URL = "https://api.twitter.com/oauth/access_token";AUTHORIZE_URL = "https://api.twitter.com/oauth/authorize";#Consumer keysTOKEN = "Omitted"TOKEN_SECRET = "Omitted"#Access keysACCESS_TOKEN = ""ACCESS_TOKEN_SECRET = ""TWEET = ""count = 1while len(sys.argv) > count:TWEET += sys.argv[count] + " "count += 1TWEET = TWEET[:-1] #Get rid of trailing spaceprint(TWEET + "n")#Build content header for POST to return request tokensHEADER_TITLE = "Authorization"#Consumer keyHEADER = 'OAuth oauth_callback="oob", oauth_consumer_key="' + TOKEN + '", '#NonceHEADER += 'oauth_nonce="'NonCE = ""for i in range(32):NonCE += chr(random.randint(97, 122))HEADER += NonCEHEADER += '", '#TimestampTIMESTAMP = str(int(time.time()))#SignatureHEADER += 'oauth_signature="'PARAMETER_STRING = "oauth_callback=oob&oauth_consumer_key=" + TOKEN + "&oauth_nonce=" + NonCE + "&oauth_signature_method=HMAC-SHA1&oauth_timestamp=" + TIMESTAMP + "&oauth_version=1.0"base_STRING = 'POST&' + urllib.parse.quote(REQUEST_URL, '') + '&' + urllib.parse.quote(PARAMETER_STRING, '')SIGNING_KEY = urllib.parse.quote(TOKEN_SECRET, '') + '&'print("DEBUG : SIGNING KEY " + SIGNING_KEY + " base STRING " + base_STRING + "n")HEADER += urllib.parse.quote(base64.standard_b64enpre(hmac.new(SIGNING_KEY.enpre(), base_STRING.enpre(), sha1).digest()).depre('ascii'))HEADER += '", '#Signature MethodHEADER += 'oauth_signature_method="HMAC-SHA1", '#TimestampHEADER += 'oauth_timestamp="' + TIMESTAMP + '", '#VersionHEADER += 'oauth_version="1.0"'print(HEADER_TITLE + ":n" + HEADER)HTTP_REQUEST = urllib.request.Request(REQUEST_URL)HTTP_REQUEST.add_header(HEADER_TITLE, HEADER)print(urllib.request.urlopen(HTTP_REQUEST, bytes('', 'ascii')).read())


