Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Исправление ошибки с неверной подписью запроса в Amazon Storage Service для Delphi XE2

Delphi , Синтаксис , Типы и Переменные

Исправление ошибки "SignatureDoesNotMatch" при использовании Amazon Storage Service в Delphi XE2

Вопрос, поднятый пользователем, заключается в возникновении ошибки SignatureDoesNotMatch при попытке загрузки объектов в Amazon Storage Service с использованием Delphi XE2. Ошибка проявляется только при установке типа содержимого Content-type в форматы, связанные с текстовыми данными, например, text/plain или text/html. При изменении типа содержимого на другие значения, например, video/3gpp, проблема исчезает, и загрузка проходит успешно.

Подтвержденный ответ:

Пользователь обнаружил, что проблема решается путем добавления параметра charset=ISO-8859-1 к строке Content-type. Изменение выглядит следующим образом:

Headers.Values['Content-type']:='text/plain; charset=ISO-8859-1';

При детальном анализе кода было выявлено, что класс TIdEntityHeaderInfo (расположенный в файле IdHTTPHeaderInfo.pas) модифицирует строку Content-type, добавляя к ней параметр кодировки, если это текстовый тип данных и параметр кодировки отсутствует. Это приводит к несоответствию подписи, так как изменение строки после процесса подписи делает подпись недействительной.

Пример кода:

var
  ConInfo: TAmazonConnectionInfo;
  RespInfo: TCloudResponseInfo;
  Service: TAmazonStorageService;
  Content: TBytes;
  Headers: TStringList;
begin
  ConInfo:=TAmazonConnectionInfo.Create(nil);
  ConInfo.AccountName:='YOUR ACCOUNT NAME';
  ConInfo.AccountKey:='YOUR ACCOUNT KEY';
  ConInfo.Protocol:='http';

  Service:=TAmazonStorageService.Create(ConInfo);
  RespInfo:=TCloudResponseInfo.Create;

  SetLength(Content, 128);
  FillMemory(@Content[0], 128, Byte('x'));

  Headers:=TStringList.Create;
  // Установка Content-type с параметром кодировки
  Headers.Values['Content-type']:='text/plain; charset=ISO-8859-1';

  if not Service.UploadObject('YOUR BUCKET', 'test.txt', Content, TRUE, nil, Headers, amzbaPrivate, RespInfo) then
    ShowMessage('Failed:' + RespInfo.StatusMessage);
end;

Комментарии:

Пользователи, столкнувшиеся с подобной проблемой, должны обратить внимание на корректность указания параметра кодировки в строке Content-type. Также стоит отметить, что имена бакетов в Amazon Storage Service должны быть в нижнем регистре, что может быть дополнительной причиной возникновения ошибки 403 Forbidden.


Эта статья предназначена для разработчиков, использующих технологии Delphi и Object Pascal, и может быть полезна при решении проблем, связанных с интеграцией Amazon Storage Service в свои проекты.

Создано по материалам из источника по ссылке.

Пользователь столкнулся с ошибкой `SignatureDoesNotMatch` при использовании Amazon Storage Service в Delphi XE2, связанной с установкой определенного типа содержимого `Content-type`.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Типы и Переменные ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-07-29 03:52:33/0.0060129165649414/0