2011-10-14 23 views
9
ile ilgili sorunları gönderin

Amazon'un SES Hizmetine Indy's TIdHTTP kullanarak gönderme sorunları yaşıyorum. HTTP/1.1 404Indy TIdHTTP

Not Found: Indy 10.5.7 altında

  • hatası alıyorum

    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&[email protected]%2Ecom', Params); 
    
        finally 
        SSLHandler.Free; 
        HttpClient.Free; 
        Params.Free; 
        end; 
    end; 
    

    Sonuç: Burada

    i kullanıyorum kod örneği
  • Indy 9.0.14 altında hata mesajı alıyorum: Soket Hatası # 11004

Hata ayıklama Denemeler

  • Aynı demo başarıyla bir HTTPS web sayfasından HTML GET olabilir.

  • Yukarıdaki URL'yi bir tarayıcıya yapıştırırsam, beklenen XML sonucunu gösterir.

Sebep hakkındaki her türlü tavsiyeyi takdir ediyorum.

+2

Ben SSL dll diğer ihtiyacı inanıyoruz uygulama veya windows system32 klasöründe aynı klasörde ... bana bir yere sahip olanlar yüklemek istiyorsanız, benim sürümü libeay32.dll 1.0.0.4 ve ssleay32.dll 1.0.0.4 – ComputerSaysNo

+1

değil Herhangi bir 'Params'' POST', web servisiyle bu şekilde iletişim kurmak istediğinizden emin misiniz? –

+1

@PrematureOptimizasyon her şeyden sonra mı? param ad = value, bu durumda Action = VerifyEmailAddress & AWSAccessKeyId = 012Some123Key46 & EmailAddress = test @ test% 2Ecom – ComputerSaysNo

cevap

3

Bu gönderi sadece eksik bir doğal tahminle.

Belki Remy, düzeltme yapmanıza yardımcı olabilir. Aşağıdaki kod ile HTTP/1.1 400 Hatalı İstek alıyorum ama merak ediyorum, API referenceCommon Query Parameters hakkında konuştuğum için en azından gerekli olan imza için yaratacağım dijital imza nedir? .

Bunu test edemem çünkü orada hesabım yok. Ama

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('[email protected]'); 
    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; 
+0

klasörüne ekledim. Şunu deneyeceğim, ancak neden Indy ile aynı URL'yi yapıştırmak için farklı bir sonuç almam gerektiğini göremiyorum tarayıcı IOW kesinlikle sorun nedeniyle XML hatası sonucu almalıyım parametreleri nedeniyle !? – Xaz

+0

@ Xaz, örneğin Firefox, HTTP 400 Hatalı İstek hatası alsa bile içeriği görüntüler. Örneğin. Internet Explorer size kötü bir istek olduğunu söyler ve XML içerik yanıtını göstermez, Indy aynı şekilde çalışır, hata mesajını oluşturur ve içeriği atar. Örneğinizden gelen isteğin yanlış parametreleri var; yani [IncompleteSignature] (http://docs.amazonwebservices.com/ses/latest/APIReference/index.html?CommonErrors.html) size HTTP Durum Kodu = 400 (hatalı istek) tablosunda açıklandığı şekilde bilgi verir. – TLama

+0

Anlayışımdaki boşlukları doldurduğunuz için teşekkür ederiz. Şimdi iyi ilerleme kaydediyorum. – Xaz

İlgili konular