我正试图从upwork的api中获取一些数据。 我正在使用Requests-OAuthlib。对于一个API请求它可以工作但是对于第二个我得到这个错误:" 重复时间戳/ nonce组合,可能的重放攻击。请求被拒绝。" 所以我尝试修改Requests-OAuthlib并通过将其置于内部构造函数中手动更改时间戳和nonce:
ur = u''+str(SystemRandom().random())
ur = ur.replace("0.","")
self.client.nonce = ur
ts = u'' + str(int(time()))
self.client.timestamp = ts
在self.client = client_class之后(... 但它仍然无效。 我是python和OAuth的完全初学者所以我宁愿使用这个库而不是手动构建请求URL。
这是图书馆Requests-OAuthlib source code
的源代码如果我在调用结束时打印它们,它们的值与我设置的值相同,但设置它们似乎没有效果,正常工作仍然表示重放攻击。 我也尝试将它们放在标题中,仍然无法正常工作
r.headers['oauth_nonce'] = ur
r.headers['oauth_timestamp'] = ts
更新 我打印了r.headers,它包含这些:
第一次通话
oauth_nonce="55156586115444478931487605669", oauth_timestamp="1487605669"
进行第二次通话
oauth_nonce="117844793977954758411487605670", oauth_timestamp="1487605670"
随机数和时间戳彼此不同。那么为什么上班给我:"重复的时间戳/ nonce组合,可能的重播攻击。请求被拒绝。" ?
更新2:可能只是一些疯狂的上班行为,仍在等待他们的回答。我相信,因为如果我在端点中更改某些内容它会起作用,那么nonces / timestamps似乎与问题无关。
更新3:我从上班得到了答案。我真的无法理解答案,但如果你认为这是有道理的,你可以解决这个问题。无论如何我找到了一个解决方法。 https://community.upwork.com/t5/API-Questions-Answers/Wrong-API-error-message/td-p/306489
答案 0 :(得分:0)
对于遇到此问题的任何人,我都将头撞了几个小时,直到我最终使用Fiddler来查看请求和响应。
服务器使用302重定向进行响应,我的http库在重定向后发送了相同的标头(当然包括重复的随机数和时间戳)。