Отправить запросы на отдых веб-сервисам Amazon с помощью Visual FoxPro (возможная ошибка подписи) - PullRequest
1 голос
/ 14 ноября 2010

Я пытаюсь отправить инструкции для создания нового домена SimpleDB с использованием VFP9.

Библиотека .fll появилась благодаря программному обеспечению для сладкого картофеля, а разница в часах была решена с помощью дополнительной переменной. Я видел другие примеры с Java и PHP здесь. Кроме того, я проверяю на странице разработчика aws примеры этого:

http://docs.amazonwebservices.com/AmazonSimpleDB/latest/DeveloperGuide/index.html?REST_RESTAuth.html http://docs.amazonwebservices.com/AmazonSimpleDB/latest/DeveloperGuide/SDB_API_CreateDomain.html

но все же не повезло. Я сделал файл .prg для проверки моего соединения и получил:

<?xml version="1.0"?>
<Response><Errors><Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.</Message></Error></Errors><RequestID>2e4718de-4ba2-2f76-0aad-a7f3a4c86ab5</RequestID></Response>

Вот код для моего .prg:

*   http://www.sweetpotatosoftware.com/SPSBlog/2009/08/09/MajorVFPEncryptionUpdate.aspx

SET LIBRARY TO ('vfpencryption71.fll')

PUBLIC cURL_AWS_SDBService

PUBLIC cAWSAccessKeyId
PUBLIC cAWSSecretAccessKey
PUBLIC cAWS_Action
PUBLIC cAWS_SignatureMethod
PUBLIC cAWS_SignatureVersion
PUBLIC cAWS_Version
PUBLIC cAWS_TimeStamp
PUBLIC cAWS_Signature
PUBLIC nAWS_UTCDifference

nAWS_UTCDifference = 5

cURL_AWS_SDBService = 'https://sdb.amazonaws.com'
cAWS_Action = 'CreateDomain'
cAWSAccessKeyId = (MY_ACCESS_ID)
cAWSSecretAccessKey = (MY_SECRET_ACCESS_KEY)
cAWS_TimeStamp = STRTRAN(STRCONV(TTOC(DATETIME() + (60 * 60 * nAWS_UTCDifference),3),9),':','%3A') + '-00%3A00'
cAWS_SignatureVersion = '2'
cAWS_SignatureMethod = 'HmacSHA256'
cAWS_Version = '2009-04-15'

LOCAL cFirma
SET TEXTMERGE on
TEXT TO cFirma noshow
GET\n<<cURL_AWS_SDBService>>\n/\nAWSAccessKeyId=<<cAWSAccessKeyId>>&Action=<<cAWS_Action>>&DomainName=Atoq_SDB&SignatureMethod=<<cAWS_SignatureMethod>>&SignatureVersion=<<cAWS_SignatureVersion>>&Timestamp=<<cAWS_TimeStamp>>&Version=<<cAWS_Version>>
ENDTEXT
SET TEXTMERGE off
clear
?cFirma

cAWS_Signature = HMAC(cFirma,cAWSSecretAccessKey ,2)
cAWS_Signature = STRCONV(cAWS_Signature,15)
?
?cAWS_Signature
?
SET TEXTMERGE on
TEXT TO cCadena noshow
<<cURL_AWS_SDBService>>/?Action=<<cAWS_Action>>&AWSAccessKeyId=<<cAWSAccessKeyId>>&DomainName=New_Database&SignatureVersion=<<cAWS_SignatureVersion>>&SignatureMethod=<<cAWS_SignatureMethod>>&Timestamp=<<cAWS_TimeStamp>>&Version=<<cAWS_Version>>&Signature=<<cAWS_Signature>>
ENDTEXT

SET TEXTMERGE off
?cCadena
?
objSrvHTTP = CreateObject ("Msxml2.ServerXMLHTTP.3.0")
objSrvHTTP.open('GET',cCadena, .F.)
objSrvHTTP.send()

?objSrvHTTP.responseText

Что я здесь не так делаю?

ТИА

1 Ответ

0 голосов
/ 12 апреля 2011

Тупой вопрос, но используете ли вы STRCONV (cAWS_Signature, 15) вместо STRCONV (cAWS_Signature, 13) специально?Документы Amazon ссылаются на Base64Encode (Signature), который, по-видимому, означает 13 в файле справки VFP9 для strconv ()

...