我正在尝试从 upwork 的 api 获取一些数据。 我正在使用Requests-OAuthlib对于一个 API 请求,它可以工作,但对于第二个请求,我收到此错误:“重复的时间戳/随机数组合,可能的重播攻击。请求被拒绝。” 因此,我尝试修改 Requests-OAuthlib 并通过将其放入构造函数中来手动更改时间戳和随机数:
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
如果我在通话结束时打印它们,它们的值与我设置的值相同,但设置它们似乎没有效果,upwork仍然说重放攻击。 我也尝试将它们放入标题中,但仍然不起作用
r.headers['oauth_nonce'] = ur
r.headers['oauth_timestamp'] = ts
更新: 我打印了 r.headers,它包含这些:
第一次通话
oauth_nonce="55156586115444478931487605669", oauth_timestamp="1487605669"
第二次通话
oauth_nonce="117844793977954758411487605670", oauth_timestamp="1487605670"
随机数和时间戳彼此不同。那么为什么 upwork 给我:“重复的时间戳/随机数组合,可能的重播攻击。请求被拒绝。” ?
更新2:可能这只是一些疯狂的工作行为,仍在等待他们的答复。我相信,因为如果我更改端点中的某些内容,它就会起作用,因此随机数/时间戳似乎与问题无关。
更新3:我从upwork得到了答复。真诚地,我无法理解答案,但如果您认为这是有道理的,您可以关闭问题。无论如何我找到了解决方法。 https://community.upwork.com/t5/API-Questions-Answers/Wrong-API-error-message/td-p/306489
最佳答案
对于遇到这个问题的人,我花了几个小时的时间来解决这个问题,直到我最终使用 Fiddler 查看请求和响应。
服务器通过 302 重定向进行响应,并且我的 http 库有助于跟踪重定向并发送相同的 header - 其中当然包括重复的随机数和时间戳。
关于python - 如何更改 Requests-OAuthlib 中的时间戳和随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42346528/