Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi IdHTTP + IdSSLIOHandlerSocketOpenSSL = 404 (https://www.delphipraxis.net/143201-idhttp-idssliohandlersocketopenssl-%3D-404-a.html)

Hedge 11. Nov 2009 23:37


IdHTTP + IdSSLIOHandlerSocketOpenSSL = 404
 
Habe auf einem Form die oben genannten Komponenten verstreut, die beiden OpenSSL-Bibliotheken liegen im Projektverzeichnis und beim IdHTTP-Objekt ist der IOHandler brav auf das IdSSLIOHandlerSocketOpenSSL-Objekt gesetzt

Damit der Server die Anfrage akzeptiert noch den UserAgent gesetzt:

IdHttp1.Request.UserAgent:='Mozilla/4.0';

Memo1.Lines.Text := IdHTTP1.Post('https://www.homepage.com/test.php',data);

Das gibt nen 404 Fehler.

Wenn man die URL im Browser hingegen eingibt kommt im Firefox:
Dieser Verbindung wird nicht vertraut
weil kein gültiges Zertifikat vorhanden ist.

Ist auch egal, aber was habe ich vergessen zu setzen?
Habe leider kein Tutorial diesbezüglich gefunden.

Björn Ole 12. Nov 2009 00:01

Re: IdHTTP + IdSSLIOHandlerSocketOpenSSL = 404
 
Nur eine Vermutung, aber versuch mal folgendes:

Delphi-Quellcode:
IdSSLIOHandlerSocketOpenSSL.SSLOptions.Mode := sslmClient;
IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvSSLv23;
IdSSLIOHandlerSocketOpenSSL.SSLOptions.VerifyDepth := 5;

Hedge 12. Nov 2009 00:03

Re: IdHTTP + IdSSLIOHandlerSocketOpenSSL = 404
 
Danke für die Antwort zu später Stunde, aber es hat leider nichts gebracht.

Assertor 12. Nov 2009 11:08

Re: IdHTTP + IdSSLIOHandlerSocketOpenSSL = 404
 
Hi Hedge,

das sieht auf den Ersten Blick alles richtig aus. Der Fehler 404 ist ja jedem Surfer bekannt, also muß hier etwas am Server nicht mitspielen oder Du hast einen Tippfehler in der URL. Wenn Du Zugriff auf den Server hast prüfe mal, ob da irgendeine htaccess Datei die Zugriffe umleitet (im Indy IdHTTP entsprechend HandelRedirects auf true setzen).

Zeig auch mal bitte, wie Du Data befüllst. Das dürfte mit dem Problem aber nichts zu tun haben. Für mich sieht es so aus, als wenn da wirklich ein Fehler in der URL ist oder der Server am Ende der Ausführung von test.php auf etwas umleitet, was es nicht gibt - unter Umständen ist die Umleitung ja abhängig von den POST Daten.

Mach Doch auch mal ein get auf test.php (ohne Daten) und guck, ob Du eine Fehlermeldung bekommst.

Gruß Assertor

Hedge 12. Nov 2009 13:18

Re: IdHTTP + IdSSLIOHandlerSocketOpenSSL = 404
 
1.) Die URL stimmt, im Browser meckert er bei der selben URL nur über die fehlende vertrauenswürdige Verbindung
2.) .htaccess mal rausgenommen, aber es kam trotzdem der 404-Fehler
3.) HandleRedirects=true auch 404
4.) Get gibt auch ein 404
5.) data:

Delphi-Quellcode:
var
  data: TIdMultiPartFormDataStream;
begin
    data.AddFormField('field1', 'test');
    data.AddFormField('field2', 'value2');
    data.AddFormField('field3', 'value3');
...
Hast du noch andere Ideen wie ich prüfen kann was in die Hose geht?

Assertor 12. Nov 2009 13:24

Re: IdHTTP + IdSSLIOHandlerSocketOpenSSL = 404
 
Hi Hedge,

ok, danke für die Info. Kannst Du mir die echte URL mal per PN schicken? Dann kann ich im Debugger und mit einem Netzwerk Sniffer gucken, ob auch die richtige Adresse aufgerufen wird.

Gruß Assertor

Assertor 12. Nov 2009 13:31

Re: IdHTTP + IdSSLIOHandlerSocketOpenSSL = 404
 
Hi,

also Zwischenmeldung: Beim GET bekomm ich ein 403 (Forbidden) und kein 404... Also bisher konnte ich feststellen, dass der Server da irgendwelche merkwürdigen Umleitungen macht bzw überhaupt keinen Content zurückliefert.

Edit: Hab das mit dem UserAgent auch gerade gesehen, bevor sich nun mein Rechner verabschiedet hat ;)

Edit2: Der Server sendet mir überhaupt keine Antwort, auch mit angepasstem UserAgent.

Weiter gehts...

Gruß Assertor

Hedge 12. Nov 2009 13:51

Re: IdHTTP + IdSSLIOHandlerSocketOpenSSL = 404
 
Du musst nen User-Agent setzen.

IdHttp1.Request.UserAgent:='Mozilla/4.0';

Hedge 12. Nov 2009 21:50

Re: IdHTTP + IdSSLIOHandlerSocketOpenSSL = 404
 
Assertor und ich haben so ein bisschen geschnackt.
Er ist dabei auf folgende Lösung gekommen:

Zitat:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  data: TStringList;
begin
  data := TStringList.Create;
  try
    data.Values['test'] := 'abc';
    IdHttp1.Request.UserAgent:='Mozilla/4.0';
    Memo1.Lines.Text := IdHTTP1.Post('https://192.168.101.101/test.php', data);
  finally
    data.Free;
  end;
end;
ich hatte eins Übersehen: TIdMultiPartFormDataStream funktioniert nur, wenn Du eine Webseite aufrufst, die ein Formular hat.
OK, habe das geändert, aber kriege nach wie vor einen 404.

Assertor 13. Nov 2009 13:55

Re: IdHTTP + IdSSLIOHandlerSocketOpenSSL = 404
 
Hi,

Zitat:

Zitat von Hedge
Assertor und ich haben so ein bisschen geschnackt.
Er ist dabei auf folgende Lösung gekommen:

Richtig. TStringList für Übertragen von POST und GET Parametern. MultiPartFormData ist für das Senden von Feldern eines HTTP Formulars (Loginseiten o.ä.).

Zitat:

Zitat von Hedge
OK, habe das geändert, aber kriege nach wie vor einen 404.

Ich auch, aber nur bei Deinem Server. Ruf doch mal im Firefox die Addresse, die Du mir per PN genannt hast auf. Bestätige die Zertifikat-Warnung und boom - schon bist Du auf einer Confixx Einrichtungsseite und NICHT auf der test.php.

Was da schiefläuft: Dein Server ist nicht richtig eingerichtet. Überlicherweise zeigen SSL Verbindungen bei Shared / Virtual Hosts auf andere Verzeichnisse.

Also: Kein Indy Fehler

Das erste war falsche Nutzung vom Entwickler - zugegeben das hab ich auch übersehen -, das hier ist nun ein falsch eingesteller Server. Drastisch gesagt, aber wenn man das so nicht schreibt, lesen das hier wieder welche, verstehen es nicht und es hält sich wieder das blöde Gerücht Indy sei ja so schlecht für die nächsten 10 Jahre :mrgreen:

Gruß Assertor


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:41 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz