Использование не ASCII-символов при обновлении значений в AWS SimpleDB возвращает ошибку SignatureDoesNotMatch - PullRequest
2 голосов
/ 29 февраля 2012

Я разрабатываю приложение, которое хранит некоторые данные в экземпляре Amazon SimpleDB. При обновлении значений в этой базе данных я получаю сообщение об ошибке от API:

Array ([curl] => [Errors] => Array ([0] => Array ([Code] => SignatureDoesNotMatch [Message] => Рассчитанная нами подпись запроса не соответствует предоставленной вами подписи. Проверьте Ключ секретного доступа AWS и метод подписи. Подробную информацию см. В документации по обслуживанию. [BoxUsage] =>)))

Я обнаружил, что это происходит, если я пытаюсь обновить базу данных некоторыми не ASCII-символами, такими как «ØÆÅ». Я дважды проверил, что с временными метками, используемыми для генерации подписи, что-то не так (как предлагают некоторые вопросы по теме в Переполнении стека).

Может ли кто-нибудь подтвердить, что SimpleDB не поддерживает эти символы? У кого-нибудь есть обходной путь для этого?

Я использую стороннюю библиотеку для доступа к базе данных. Его можно найти здесь: http://sourceforge.net/projects/php-sdb/

Edit:

Дальнейшее изучение сторонней библиотеки показывает, что все параметры кодируются с использованием rawurlencode(). Насколько я вижу, он также соответствует требованиям Amazon, которые можно найти в этой статье: http://aws.amazon.com/articles/1928

Так что я в растерянности от того, что здесь попробовать.

Редактировать 2:

Я думаю, что я мог бы закрыть здесь вопрос. Я получил приложение для iPhone, которое использует тот же PHP API для хранения значений. Приложение отлично работает при публикации этих не ASCII символов. В приложении мы устанавливаем «Content-Type» как «application / x-www-form-urlencoded».

Я нашел несколько статей, описывающих то же самое:

http://chris.finne.us/2010/04/12/amazon-simpledb-signaturedoesnotmatch-error-when-putting-utf-8-characters-via-a-http-post/

http://groups.google.com/group/simple-record/browse_thread/thread/aa3cd430b35e8e1c?pli=1

Я пытался указать content-type в своем коде, но пока не увенчался успехом. Реализация использует PHP-функцию curl для выполнения запроса. Я добавил этот код для установки заголовка, но он, похоже, не имеет никакого значения:

($headers variable declared at the top of the class)
$this->headers[] = 'Content-Type: application/x-www-form-urlencoded;charset=utf-8';
curl_setopt($curl, CURLOPT_HTTPHEADER, $this->headers);

Ответы [ 2 ]

0 голосов
/ 13 марта 2012

Я обошел проблему, разместив данные в php-скрипте, а затем используя этот скрипт для публикации значений в Amazon.Это устраняло проблемы с типом содержимого, которые возникали при чтении значений непосредственно из файла cookie.

0 голосов
/ 12 марта 2012

Использование сторонних библиотек не является хорошей идеей, потому что, если у них есть ошибка, найти ее сложнее, чем в вашем собственном коде.

...