HTTPS post - was mache ich falsch?

Ich bin, die Anforderungen an die Webadresse, um XML-Dateien über das HTTPS-Verbindung. Aber diese Verbindung funktioniert wie 50%. In den meisten Fällen gelingt es nicht. Übliche Fehler "socket-Fehler #10060". Oder "Fehler beim verbinden mit SSL. EOF wurde festgestellt, dass gegen das Protokoll". Was mache ich falsch?

function SendRequest(parameters: string): IXMLDocument;
var
   sPostData: TStringList;
   sHttpSocket: TIdHTTP;
   sshSocketHandler: TIdSSLIOHandlerSocketOpenSSL;
   resStream: TStringStream;
   xDoc: IXMLDocument;

   begin
      sPostData := TStringList.Create;

      try
         sPostData.Add('add some parameter to post' + '&');
         sPostData.Add('add some parameter to post' + '&');
         sPostData.Add('add some parameter to post' + '&');
         sPostData.Add(parameters);

         sHttpSocket := TIdHTTP.Create;
         sshSocketHandler := TIdSSLIOHandlerSocketOpenSSL.Create;
         sHttpSocket.IOHandler := sshSocketHandler;

         sHttpSocket.Request.ContentType := 'application/x-www-form-urlencoded';
         sHttpSocket.Request.Method := 'POST';

         resStream := TStringStream.Create;
         sHttpSocket.Post(Self.sUrl, sPostData, resStream);

         xDoc := CreateXMLDoc;
         xDoc.LoadFromStream(resStream);

         Result := xDoc;

         resStream.Free;
         sHttpSocket.Free;
         sshSocketHandler.Free;
         sPostData.Free;
      except on E: Exception do
      begin
         TCommon.ErrorLog('errorLog.txt', DateTimeToStr(Now) + ' ' + E.Message);
      end
      end;
    end;

Vielleicht kann ich dies in einer anderen Art und Weise, dass Werke wie 100%, wenn internet-Verbindung verfügbar ist?

Grüße,
evilone

  • Wie alt ist deine version von Indy? Wenn es die eine, die kam mit Delphi erhalten dann die aktuelle aus dem SVN. Wie alt ist deine OpenSSL-Bibliothek? Ist es v0.9.x oder 1.x.x?
  • Ich weiß nicht genau. Das kam zusammen mit Delphi XE. OpenSSL-Bibliothek ist version 1.0.0.3
  • was denken Sie über StreamSec und SecureBridge? Dieser HTTP-Verbindung ist wichtig für meine Anwendung. Also, es ist besser als gar keine externe DLL-s hier - nur nativen code.
  • Haben Sie schreiben die server auch? Ist dies eine FORM, die gebucht?
  • Die beste option ist Weg von Indy und verwenden Sie die HTTP-client, sei es unsere oder die /n-software oder einen anderen Anbieter. Der Grund dafür ist, dass Indy ist ein bewegliches Ziel (Sie die Kompatibilität zwischen baut, nicht darüber zu reden-Versionen), und Sie können nicht garantieren, dass IOHandler richtige Arbeit, vor allem die Jahre-alte und nicht unterstützte StreamSec.
  • Das ist ein klein wenig hart. Indy wurde in der Vergangenheit schwierig, stimmt, aber es funktioniert gut für uns jetzt. Synapse ist auch eine gute Bibliothek, und, anscheinend, hat gute OpenSSL-Unterstützung - aber ich habe nicht versucht, dass ein Teil von ihm. Ich bin sicher, dass die Eldos Zeug ist auch gut - und Ihr bekommt tech-support - aber Sie werden zahlen müssen.
  • Nein, das ist desktop-Anwendung machen HTTPS-POST an den server. Und es ist nicht ein Formular, wo ich bin Entsendung. Nur ein Dienst, der ma-XML-Antworten. @shunty Wenn ich bauen meine app mit Synapse, kann ich arbeiten ohne DLL-s(libeay32.dll und ssleay32.dll)?
  • Synapse, kann ich arbeiten ohne DLL" - Nein. Es ist speziell für die Arbeit mit OpenSSL.
  • Die Bibliothek arbeitet ohne DLL-s? Nur SecureBlackBox?

InformationsquelleAutor evilone | 2010-12-23
Schreibe einen Kommentar