AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Bekomme XML-Datei via NetHTTPRequest.Post nicht hin.

Bekomme XML-Datei via NetHTTPRequest.Post nicht hin.

Ein Thema von Roadrunner.1 · begonnen am 2. Jun 2019 · letzter Beitrag vom 9. Jun 2019
Antwort Antwort
Roadrunner.1

Registriert seit: 3. Mai 2009
20 Beiträge
 
Delphi 10.3 Rio
 
#1

Bekomme XML-Datei via NetHTTPRequest.Post nicht hin.

  Alt 2. Jun 2019, 12:38
Hallo Comunity,
ich bin Neuling im Bereich "Internet-Anwendung" und bekomme es einfach nicht hin, eine XML-Datei für ein Login an einen Server (fehlerfrei) zu schicken.

Gesammtanforderung ist, sich mittels einer XML Datei bei einem Server anzumelden und dann in einem 2. Schritt eine andere XML Datei dorthin zu schicken
(eine Bestellung). Der Server verlangt "HTTPS" weshalb ich aufs neuste Delphi umgestiegen bin. Da die Installation der Software einfach sein sollte
habe ich ich für diese "NET" Komponenten entschieden um nicht openSSL beim User installieren zu müssen.

Ich habe mir eine XML Datei gebastelt (vom Type IXMLDOCUMENT), aufs Formular eine TNetHTTPClient und TNetHTTPRequest Komponete gesetzt,
dann im Object Inspector beim NetHTTPClient alle SecureProtocols angeklickt und beim NetHTTPRequst bei Client den NetHTTPClient eingetragen.

Im Quellcode geht's dann so weiter:

Delphi-Quellcode:
var
  ServerResponse:IHTTPResponse;
  LoginXML:IXMLDOCUMENT
begin
  // [Erstelle Inhalt von LoginXML]
  NetHTTPRequest.URL:='https://www.________________/CmdS.asmx';
  NetHTTPRequest.MethodString:='POST';
  ServerResponse:=Post(URL,LoginXML.XML, nil, TEncoding.UTF8);
end;
Als Antwort erhalte ich leider (in ServerResponse) Fehler 500: interner Server Error. Er beschwert sich das schon das 1.
übergebene Zeichen er nicht versteht (Zeile 1 Position 1). Nun halte ich mich aber genau an die Dokumentation die da
lautet:

Code:
<r c="1">
  <Login>Benutzername</Login>
  <Pwd>thePasswort</Pwd>
  <Stamp>theStamp</Stamp>
</r>
Auch ein Übergaben dieses Inhalts mittels einer TStringliste führt zur gleichen Serverrückmeldung.
Sowie diverse Änderungen am POST wie z.B.: TEncoding.Default, weglassen des letzten, der letzten 2
Parametern etc. änderte nichts an der Fehlermeldung. Eigentlich sollte vom Server ein XML zurück
gegeben werden indem entweder der Login bestätigt wird, oder mitgeteilt wird das der Login abgelehnt
wurde.

Vermutlich habe ich aber irgendwie ein Grundsätzliches Verständnisproblem oder irgend eine Einstellung
stimmt (noch) nicht. Kann mir irgend einer Erklären wie man sich bei einem Server via XML und HTTPS
anmeldet und dabei von Ihm eine XML zurück bekommt? Der 2. Schritt ist ja ähnlich, nur das da irgend
ein "Session Key" mit übergeben werden muss!? Aber eins nach dem anderen.

btw. In Wireshark konnte ich sehen das von Delphi 2 "Application Data"s (natürlich verschlüsselt) direkt
hintereinander geschickt werden. Vom Server kommt dann nur ein Application Data zurück.

ps. Ein Beispiel, ein Link zu einer Doku etc. würde mir eventuell auch schon weiter helfen, konnte aber
leider bisher nichts brauchbares finden.

Schon mal danke fürs lesen bis hierhin.
Christian Drenkard
--
mfg.
Christian Drenkard

Geändert von Roadrunner.1 ( 2. Jun 2019 um 12:44 Uhr)
  Mit Zitat antworten Zitat
Schokohase

Registriert seit: 17. Apr 2018
769 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: Bekomme XML-Datei via NetHTTPRequest.Post nicht hin.

  Alt 2. Jun 2019, 12:57
Schau dir mal mit dem Fiddler an, was du da konkret versendest.

Und das kannst du dann hier mal posten, falls du den Fehler da nicht erkennst.

Wenn du eine andere (Fremd-)Anwendung hast, die das erfolgreich kann, dann kannst du mit dem Fiddler auch das mitschneiden und mit deiner Anwendung vergleichen um den Fehler zu finden.

Geändert von Schokohase ( 2. Jun 2019 um 12:59 Uhr)
  Mit Zitat antworten Zitat
Roadrunner.1

Registriert seit: 3. Mai 2009
20 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Bekomme XML-Datei via NetHTTPRequest.Post nicht hin.

  Alt 8. Jun 2019, 16:09
Hallo Schokohase,

vielen Dank für die Info. Fiddler kannte ich nicht. Wenn ich das richtig
gemacht habe dann sende ich aktuell als erste Zeile in der XML-Datei an
den Server:

%3C%3Fxml+version=%221.0%22+encoding%3D%22utf-8%22%3F%3E&%3Cr+c=%221%22%3E

anstelle von

<?xml version="1.0" encoding="utf-8"?>

Scheint also irgend etwas mit der Codierung nicht zu stimmen.

Kann man das noch woanders als direkt beim Post Befehle einstellen?

(Post(URL,aTStrings, nil, TEncoding.UTF8)

Oder muss ich das vorher schon in der TStringlist anders "anlegen"?

Ich werd' auf jeden Fall noch ein wenig herumprobieren. Jetzt wo ich sehen
kann was ich tatsächlich an den Server schicke.
Christian Drenkard
--
mfg.
Christian Drenkard
  Mit Zitat antworten Zitat
Schokohase

Registriert seit: 17. Apr 2018
769 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: Bekomme XML-Datei via NetHTTPRequest.Post nicht hin.

  Alt 8. Jun 2019, 16:53
Hast du das was du sendest wirklich mit dem verglichen, was funktioniert?

Dann hätte dir auch der Header auffallen sollen, der bei dir nämlich folgendes enthält
Code:
Content-Type: application/x-www-form-urlencoded; charset=utf-8
aber folgendes enthalten sollte
Code:
Content-Type: text/xml; charset=utf-8
Und das passiert, wenn du die Daten das TStrings übergibst.

Erzeuge einen Stream von den XML Daten und versende den (inkl. der Information zum Content-Type).

Geändert von Schokohase ( 8. Jun 2019 um 16:56 Uhr)
  Mit Zitat antworten Zitat
Roadrunner.1

Registriert seit: 3. Mai 2009
20 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Bekomme XML-Datei via NetHTTPRequest.Post nicht hin.

  Alt 8. Jun 2019, 17:16
Hallo Schokohase,

danke für die schnelle Rückmeldung was funktioniert weiß ich leider nicht,
da ich nur "eine dicke Doku" habe, aber leider keine Ahnung wie das alles so
funktioniert. Und leider auch keinen Zugriff auf ein funktionierendes Programm.
Die Doku beschreibt im übrigen nur was in welchem Feld stehen muss, aber nicht
wie die Übertragung eigentlich funktionieren soll bzw. was sich außerhalb von
<Document> zu befinden hat...

Ich bin aber fast auf die gleiche Idee gekommen wie du. Man kann ein IXMLDOCUMENT ja
speichern und bei POST den Dateinamen angeben. Das hat nämlich dann auch funktioniert.

OK, dann werde ich das wie von dir vorgeschlagen über ein Stream versuchen. Aber die
habe ich bisher auch noch nie verwendet (bisher meist ganz klassich über FileOpen mit
eigener Klasse zum lesen/schreiben von Files gearbeitet; ist zwar schon > 20 Jahre alt
funktioniert aber einwandfrei; also warum wechseln...).

Aber leider ist damit mein Problem dann noch nicht ganz gelöst, da ich nun vom Server
folgendes zurück bekomme:

<soap:Fault>
<faultcode>soap:VersionMismatch</faultcode>
<faultstring>Possible SOAP version mismatch: Envelope namespace was unexpected. Expecting http://schemas.xmlsoap.org/soap/envelope/.</faultstring>
<detail/>

Von einem Envelope höre ich da das erste mal. Vielleicht reicht es ja aber das hinzuschicken was
auch in der Antwort von Server steht? Mal ausprobieren, über die Feiertage hat der eventuell
sowieso nicht soviel zu tun, da kann ich den mit fehlerhaften Anfragen ja etwas beschäftigen
Christian Drenkard
--
mfg.
Christian Drenkard
  Mit Zitat antworten Zitat
Schokohase

Registriert seit: 17. Apr 2018
769 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: Bekomme XML-Datei via NetHTTPRequest.Post nicht hin.

  Alt 8. Jun 2019, 18:38
Du solltest deine Zeit sinnvoller investieren und dich in SOAP generell mal etwas einlesen.
  Mit Zitat antworten Zitat
Roadrunner.1

Registriert seit: 3. Mai 2009
20 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Bekomme XML-Datei via NetHTTPRequest.Post nicht hin.

  Alt 9. Jun 2019, 16:39
Es gibt viel was ich machen könnte. Leider fehlt mir die Zeit dafür.
Für dieses Projekt hieß es zu beginn "Erstelle eine XML-Datei", von Übertragen der Daten im XML Format über HTTPS
mit aktueller Verschlüsselung, sowie vorher ein Login mittels XML und 2 Facher "Verhashung" war nicht die Rede.
So Ändern sich die Anforderungen im laufe einer Aufgabe. Bisher, ich programier auf kleinem Profiniveau
seit 20 Jahren, sah ich viele Techniken kommen und gehen, und Übertragung übers Internet war bisher kein Thema für
mich. Und wenn ich das hinbekomme habe, kann es sein das ich den Quellcode die nächsten 10 Jahre nicht mehr ändern
muss. Und bis dahin habe ich den nicht nur vergessen wo ich mich eingelesen habe, sondern das hat sich soweit
verändert das ich wieder fast bei 0 anfangen kann.

Trotzdem danke an Dich. Du hast mir echt weiter geholfen.
Christian Drenkard
--
mfg.
Christian Drenkard
  Mit Zitat antworten Zitat
Roadrunner.1

Registriert seit: 3. Mai 2009
20 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Bekomme XML-Datei via NetHTTPRequest.Post nicht hin.

  Alt 9. Jun 2019, 17:24
Es gibt viel was ich machen könnte. Leider fehlt mir die Zeit dafür.
Für dieses Projekt hieß es zu Begin: "Erstelle eine XML-Datei", von Übertragen der Daten im XML Format über HTTPS
mit aktueller Verschlüsselung, sowie vorher ein Login mittels XML und 2 Facher "Verhashung" war nicht die Rede.
So Ändern sich die Anforderungen im laufe einer Aufgabe. Bisher, ich programiere auf kleinem Profiniveau
seit 20 Jahren, sah ich viele Techniken kommen und gehen, und Übertragung übers Internet war bisher kein Thema für
mich. Und wenn ich das hinbekomme habe, kann es sein, das ich den Quellcode die nächsten 10 Jahre nicht mehr ändern
muss. Und bis dahin habe ich nicht nur vergessen in was ich mich eingelesen habe, sondern das hat sich vermutlich
auch soweit verändert das ich wieder fast bei 0 anfangen kann. Das ganze mit HTTPS ist ja auch erst seit ein paar
Jahren so massiv geworden.

Trotzdem danke an Dich. Du hast mir echt weiter geholfen.

Für alle die wissen wollen wie's geht. Es geht wohl so:
Delphi-Quellcode:
var
  aStream:TMemoryStream;
  aXML:IXMLDOCUMENT;
begin
  // XML Daten in aXML ablegen...
  with NetHTTPRequest do begin
    URL:='https://[...]/CmdS.asmx';
    MethodString:='POST';

    aStream:=TMemoryStream.Create;
    aXML.XML.SaveToStream(aStream);
    aStream.Seek(0,soFromBeginning);
    ServerResponse:=Post(URL,aStream);
    aStream.Free;
  end;
  
end
Nicht schwer, wenn man weis wie es geht
Christian Drenkard
--
mfg.
Christian Drenkard
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.185 Beiträge
 
Delphi 2006 Professional
 
#9

AW: Bekomme XML-Datei via NetHTTPRequest.Post nicht hin.

  Alt 9. Jun 2019, 18:17
Wo ist der Ressourcenschutzblock für den Stream?

Und zu dem with...do sage ich mal nichts.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf