Я использую настраиваемый PHP-скрипт для отправки запросов в API mturk на основе функций подписи от the PHP-AWS library. Вот пример запроса:mturk API дает сообщение «указанные претензии недействительными» около половины времени; resubmitting randomly fixes
https://mechanicalturk.amazonaws.com/?Service=AWSMechanicalTurkRequester&AWSAccessKeyId=MYKEY&Version=2012-03-25&Operation=NotifyWorkers&Signature=j+4UTX9x3EKltvWpoxIkp4BM6S4=&Timestamp=2015-06-25T09:37:51Z&Subject=test&MessageText=just+testing+&WorkerId.1=SOMEID
Иногда данный сценарий будет работать, а в другой раз тот же сценарий возвращает ошибку, как это:
AWS.BadClaimsSupplied The specified claims are invalid. Based on your request, your signature should be generated using the following string: AWSMechanicalTurkRequesterNotifyWorkers2015-06-25T09:37:51Z. Check to make sure your system clock and timezone is not incorrect. Our current system time: 2015-06-25T09:37:51Z. (1435225071849)
Когда я получаю AWS.BadClaimsSupplied
ошибка, неоднократно повторяющаяся сценарий, заставит ее в конечном итоге работать. Под «work» я подразумеваю, что либо API возвращает true
, и предпринимает требуемое действие, либо возвращает ошибку, относящуюся к действию, которое я запрашиваю.
Я предполагаю, что если бы я выполнял хэш неправильно или с неправильной подписью, тогда он никогда не работал *. Периодический характер проблемы заставляет меня думать, что это временная ошибка. Но приведенный выше пример показывает сообщение об ошибке, в котором время, которое я использовал для моей подписи, совпадает с временем, так что это тоже не похоже на проблему.
* хорошо, он будет работать один раз в каждых 2^160 попытках.
Я попытался отсрочить свои временные метки на 1 секунду на всякий случай, когда я был немного впереди них; что не изменило результаты. Я не могу придумать другого способа отладить это.
У вас будет прерывистый успех, существенно превышающий 1/2^160 того времени, если вы не указали urlescape/urlencode свою подпись или кодировали ее «в основном» правильно ... особенно так, как вы обрабатываете любые '+' появляется в нем. Помогает ли это? http://stackoverflow.com/a/17825022/1695906 –
Ohhhhhhhhh, теперь я понимаю. Спасибо! Вы хотите написать это как ответ? – octern