gpt4 book ai didi

delphi - Indy TIdHTTP 发布问题

转载 作者:行者123 更新时间:2023-12-03 14:44:33 30 4
gpt4 key购买 nike

我在向 Amazon 的 SES 发帖时遇到问题使用 Indy 的 TIdHTTP 的服务。

这是我正在使用的代码示例:

procedure TMainFrm.btnAmazonSESClick(Sender: TObject);
var
SSLHandler: TIdSSLIOHandlerSocket;
HttpClient: TIdHTTP;
Params: TStringStream;
begin
SSLHandler := TIdSSLIOHandlerSocket.Create(Self);
HttpClient := TIdHTTP.Create(Self);
Params := TStringStream.create('');
try
with SSLHandler do
SSLOptions.Method := sslvSSLv3
with HttpClient do
begin
IOHandler := SSLHandler;
AllowCookies := True;
HandleRedirects := True;
HTTPOptions := [hoForceEncodeParams];
Request.ContentType := 'application/x-www-form-urlencoded';
end;

PageMemo.Text := HttpClient.Post('https://email.us-east-1.amazonaws.com?Action=VerifyEmailAddress&AWSAccessKeyId=012Some123Key46&EmailAddress=test@test%2Ecom', Params);

finally
SSLHandler.Free;
HttpClient.Free;
Params.Free;
end;
end;

结果

  • 在 Indy 10.5.7 下,我收到错误:HTTP/1.1 404 Not Found

  • 在 Indy 9.0.14 下,我收到错误:Socket Error # 11004

调试试验

  • 这个演示可以成功从 HTTPS 网页获取 HTML。

  • 如果我将上面的 URL 粘贴到浏览器中,它将显示预期的 XML 结果。

如果有任何有关此原因的建议,我将不胜感激。

最佳答案

这篇文章只是一个不完整的疯狂猜测

也许雷米可以帮助你纠正它。使用以下代码,我收到 HTTP/1.1 400 Bad Request 但我并不奇怪,因为 API reference谈论Common Query Parameters至少需要您为请求创建的数字签名,我不知道该怎么做。

我根本无法测试这个,因为我在那里没有帐户。但我认为

procedure TForm1.Button1Click(Sender: TObject);
var
HTTPClient: TIdHTTP;
Parameters: TStrings;
SSLHandler: TIdSSLIOHandlerSocketOpenSSL;

begin
SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
HTTPClient := TIdHTTP.Create(nil);
Parameters := TStringList.Create;

try
SSLHandler.SSLOptions.Method := sslvSSLv3;
SSLHandler.SSLOptions.Mode := sslmUnassigned;

HTTPClient.IOHandler := SSLHandler;
HTTPClient.HTTPOptions := [hoForceEncodeParams];
HTTPClient.Request.ContentType := 'application/x-www-form-urlencoded';

Parameters.Add('Action=VerifyEmailAddress');
Parameters.Add('EmailAddress=test@test.com');
Parameters.Add('AWSAccessKeyId=012Some123Key46');
Parameters.Add('SignatureVersion=2');
Parameters.Add('Expires='); // ???
Parameters.Add('Signature='); // ???

PageMemo.Text := HTTPClient.Post('https://email.us-east-1.amazonaws.com', Parameters);

finally
SSLHandler.Free;
HTTPClient.Free;
Parameters.Free;
end;
end;

关于delphi - Indy TIdHTTP 发布问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7762584/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com