Rest 如何将CURL命令转换为Delphi
我正在尝试将Delphi10.2 TREST组件与AWS结合使用。我有一个CURL命令:Rest 如何将CURL命令转换为Delphi,rest,delphi,curl,delphi-10.2-tokyo,Rest,Delphi,Curl,Delphi 10.2 Tokyo,我正在尝试将Delphi10.2 TREST组件与AWS结合使用。我有一个CURL命令: curl -X POST --data @GetIDData.json -H "X-Amz-Target: AWSCognitoIdentityService.GetId" -H "Content-Type: application/x-amz-json-1.1" https://cognito-identity.us-east-1.amazonaws.com/ G
curl -X POST --data @GetIDData.json -H "X-Amz-Target: AWSCognitoIdentityService.GetId" -H "Content-Type: application/x-amz-json-1.1" https://cognito-identity.us-east-1.amazonaws.com/
GetIDData.json包含以下内容:
{"IdentityPoolId":"us-east-1:XXXXXXXXXXXXXXXXXXXXX"}
成功的结果是:
{"IdentityId":"us-east-1:XXXXXXXXXXXXXXXXXXXXX"}
我想使用Delphi TREST组件复制该结果:
...
fClient := TRESTClient.Create('https://cognito-identity.us-east-1.amazonaws.com/');
fClient.SetHTTPHeader('Content-Type', 'application/x-amz-json-1.1');
fClient.SetHTTPHeader('X-Amz-Target', 'AWSCognitoIdentityService.GetId');
fRequest := TRESTRequest.Create(nil);
fRequest.Client := fClient;
fRequest.Method := TRESTRequestMethod.rmPOST;
// fRequest.AddBody('{"IdentityPoolId":"us-east-1:XXXXXXXXXXXXXXXXXXXXX"}', ctAPPLICATION_JSON);
lJObj := TJSONObject.Create;
lJObj.AddPair('IdentityPoolId', 'us-east-1:XXXXXXXXXXXXXXXXXXXXX');
fRequest.AddBody(lJObj);
fRequest.Execute;
str := fRequest.Response.Content;
...
但结果是一个错误:
{"Output":"__type":"com.amazon.coral.service#UnknownOperationException","message":null},"Version":"1.0"}
下载OpenSSL并将DLL放入System32没有帮助
有人能告诉我我做错了什么吗?这个方法有效:
...
lClient := TRESTClient.Create('https://cognito-identity.us-east-1.amazonaws.com/');
lRequest := TRESTRequest.Create(nil);
lRequest.Client := lClient;
lRequest.Method := TRESTRequestMethod.rmPOST;
lParam := lRequest.Params.AddItem;
lParam.name := 'X-Amz-Target';
lParam.Value := 'AWSCognitoIdentityService.GetId';
lParam.ContentType := ctNone;
lParam.Kind := pkHTTPHEADER;
lParam := lRequest.Params.AddItem;
lParam.name := 'Content-Type';
lParam.Value := 'application/x-amz-json-1.1';
lParam.ContentType := ctNone;
lParam.Kind := pkHTTPHEADER;
lParam.Options := [poDoNotEncode];
lRequest.AddBody('{"IdentityPoolId":"us-east-1:XXXXXXXXXXXXXXXXXXXXX"}', ctAPPLICATION_JSON);
lRequest.Execute;
...
WireShark没有我想要的那么有用,因为它的文档已经过时了,我正在使用加密。但是@Christophe Morio在帖子中提到的网站使得找到解决方案变得轻而易举