I do not know if my code is correct or incorrect. when I try to run a software error, 403 occurs ..
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,ssbase64, StdCtrls,secutils,OmniXMLUtils,OmniXML, xmldom, XMLIntf, msxmldom, XMLDoc, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,IdURI; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; XMLDocument1: TXMLDocument; IdHTTP1: TIdHTTP; Memo2: TMemo; Memo3: TMemo; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function MyEncodeUrl(source:string):string; var i:integer; begin result := ''; for i := 1 to length(source) do if not (source[i] in ['A'..'Z','a'..'z','0','1'..'9','-','_','~','.']) then result := result + '%'+inttohex(ord(source[i]),2) else result := result + source[i]; end; procedure TForm1.Button1Click(Sender: TObject); var uhost,uri,public_key, private_key,signature,timestamp,string_to_sign : string; request : String; begin uhost := 'ecs.amazonaws.com'; uri := 'onca/xml'; public_key := '1ETPTJHQ37P671HNXXX'; private_key := 'j4JtMHQwL6wR39fy2CJgNfHibLjK9GsC5Z6XXXX'; timestamp := MyEncodeUrl(XMLDateTimeToStr(now)); string_to_sign := 'AWSAccessKeyId=1ETPTJHQ37P671HN9282'; string_to_sign := string_to_sign+ '&AssociateTag=moc-20&ItemPage=1&Keywords=kitchen%20aid&Operation=ItemSearch&ResponseGroup=Large&SearchIndex=Kitchen&'; string_to_sign := string_to_sign+'service=AWSECommerceService&Timestamp='+timestamp; string_to_sign := string_to_sign+'&Version=2009-03-31'; Memo1.Clear; Memo1.Lines.Append('GET'); Memo1.Lines.Append('ecs.amazonaws.com'); Memo1.Lines.Append('/onca/xml'); Memo1.Lines.Append(string_to_sign); signature := StrToMime64(HMACString(haSHA256, private_key, 32, Memo1.Text)); request := 'http://ecs.amazonaws.com/onca/xml?AWSAccessKeyId=1ETPTJHQ37P671HN9282'; request := request+ '&AssociateTag=moc-20&ItemPage=1&Keywords=kitchen%20aid&Operation=ItemSearch&ResponseGroup=Large&SearchIndex=Kitchen&'; request := request+'service=AWSECommerceService&Timestamp='+timestamp; request := request+'&Version=2009-03-31'; request := request+'&Signature='+signature; Memo1.Text := IdHTTP1.Get(request); end; end.
can anyone track my mistake?
FYI :: Delphi 7 with build in Indy; use OmniXML to generate timestamp use OpenStrSecII to generate signature