@
fanzeyi @
joyqi 我发现腾讯微博oauth签名的真正问题了
并不是urllib或者httplib的问题
而是计算basestring的计算方法有问题:
比如待签名的东西参数有:
d = {
oauth_callback :
xxxx.com/sthoauth_consumer_key : 123456
oauth_nonce : 33333
oauth_signature_method : HMAC-SHA1
oauth_timestamp : 1234455667777
oauth_version : 1.0
}
首先把d按照key做一下sort
d = sorted(d.items(), key=lambda x:x[0])
其次,把参数和参数的值都做urlencode
dd = [urllib.urlencode([x]) for x in d]
然后,把dd用&符号连接起来,再做一次urlencode(也就是quote)
part3 = urllib.quote("&".join(dd))
这里的关键就是说,这些参数前前后后,被quote了两次!
这样做,就ok了