Post Probleme mit Indy TIdHTTP
Ich bin haben Sie Probleme mit der Buchung auf Amazon SES Service mit Indy TIdHTTP.
Hier ist ein Beispiel für den code, den ich verwende:
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;
Ergebnis
-
Unter Indy 10.5.7 bekomme ich die Fehlermeldung: HTTP/1.1 404 not Found
-
Unter Indy 9.0.14 bekomme ich die Fehlermeldung: Socket Error # 11004
Debugging-Versuche
-
Diese gleiche demo können erfolgreich HOLEN Sie den HTML-von einer HTTPS-Seite.
-
Wenn ich fügen Sie die obige URL in einem browser, es zeigt das erwartete XML-Ergebnis.
Ich würde schätzen jede Beratung, die auf die Ursache.
- Ich glaube, Sie müssen den SSL-dll ' s im selben Ordner wie die Anwendung oder in den windows-system32-Ordner... lassen Sie mich wissen, wenn Sie möchten mir hochladen, die ich schon irgendwo, meine version ist libeay32.dll 1.0.0.4 und ssleay32.dll 1.0.0.4
- Sie nicht
POST
alleParams
, sind Sie sicher, dass Sie möchten, um die Kommunikation mit dem webservice auf diese Weise? - alles nach ? ist param name=Wert, in diesem Fall Action=VerifyEmailAddress&AWSAccessKeyId=012Some123Key46&EmailAddress=test@test%2Ecom
- Duminica, nicht wirklich. query-string <> form-data
- Danke, ich habe auch die neueste SSL-DLL ' s in den Ordner
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser Beitrag ist nur eine unvollständige wild guess.
Vielleicht Remy könnte Ihnen helfen, es zu korrigieren. Mit dem folgenden code bin ich immer HTTP/1.1 400 Bad Request ich bin aber nicht Wundern, denn die
API Referenz
spricht überCommon Query-Parameter
wo ist zumindest erforderlich, die digitale Signatur, die Sie erstellen werden, wird für die Anfrage, was ich nicht weiß, wie zu tun ist.Kann ich nicht testen, überhaupt, weil ich kein Konto dort. Aber ich denke, die
HTTP 400 Bad Request
Fehler. E. g. Internet Explorer Ihnen sagen, dass bad request passiert ist und nicht anzeigen der XML-Inhalte Antwort, Indy funktioniert, erstellen Sie die Fehlermeldung, und werfen Sie den Inhalt. Die Anforderung aus dem Beispiel hat falsche Parameter, nämlich die IncompleteSignature was gibt Sie wie in der Tabelle beschrieben HTTP-Status-Code = 400 (bad request).EIdHTTPProtocolException
Ausnahme statt.https://email.us-east-1.amazonaws.com?Action=VerifyEmailAddress&AWSAccessKeyId=012Some123Key46&EmailAddress=test@test%2Ecom
in einem browser, wird es zu senden eineGET
Anfrage, nicht einePOST
Anfrage, so tun Sie das gleiche in Indy, zB:PageMemo.Text := HttpClient.Get('https://email.us-east-1.amazonaws.com?Action=VerifyEmailAddress&AWSAccessKeyId=012Some123Key46&EmailAddress=test@test%2Ecom');
. Sonstname=value
Paare in eineTStringList
undPost()
dass.Grundsätzlich müssen Sie den Gebrauch der richtigen library, also:
Für Indy 10.5.7 openssl-1.0.1 e-i386-win32-oder openssl-1.0.1 e-x64_86-win64-von http://indy.fulgan.com/SSL/
Sie können herunterladen wollen, ein ssl-demo-aus: http://indy.fulgan.com/ZIP/
Hinsichtlich
Jose