我正在尝试将 python 与 rauth 库一起使用来连接到 intuit 合作伙伴平台上的 QBO api,而且我大部分时间都让它正常工作。但是,我在发送请求时经常遇到错误:
Exception authenticating OAuth; errorCode=003200; statusCode=401
此消息在失败时也位于响应标头中:
WWW-Authenticate: OAuth oauth_problem="signature_invalid"
错误代码表明请求没有被正确签名,但我使用标准 oauth 库来自动签署数据,并且它在大约一半的时间内工作。我的连接代码如下:
if method is 'post':
headers = {}
if action in ['create', 'update', 'delete']:
headers['Content-Type'] = 'application/xml'
r = self.session.post(url, data=data, headers=headers, params=params, header_auth=True)
else:
r = self.session.get(url, params=params, header_auth=True)
其中 self.session 是一个 rauth.OAuth1Session。
生成请求的示例是:
GET /resource/customer/v2/682571780/1 HTTP/1.1
Host: qbo.sbfinance.intuit.com
Accept: */*
Content-Length: 0
Accept-Encoding: gzip, deflate, compress
authorization: OAuth realm="",oauth_nonce="d577f23920c96f8ee79eff6588c83c9ebf65cf20",oauth_timestamp="1366147949",oauth_consumer_key="qyprdCFOHBypPTK8XX0g8N4bZ8ceVA",oauth_signature_method="HMAC-SHA1",oauth_version="1.0",oauth_token="qyprdp9p7diRBIt11In225OOGRzcgl9o4DsQRJduHJFP09gY",oauth_signature="w5V3u2ATnj/rDc9vFD7inr8MO6I%3D"
User-Agent: python-requests/1.1.0 CPython/2.7.3 Linux/3.5.0-17-generic
这是 rauth 库的问题吗?我是否遗漏了一个可以使其更稳定的参数?