Forum: PC-Programmierung HTTP-Post statt CURL_exec?


von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Ich muss mittels eines eigenen Programmes eine XML-Datei zu eimem Server 
senden und dessen Antwort verarbeiten.

Alle Muster-Codes, die ich finde, benutzen CURL. Dieses setzt aber die 
Installation der entsprechenden libcurl.dll und weiterer (CURL ist 
abhängig von libssl usw.) voraus, was ich aber eigentlich vermeiden 
will.

Theoretisch bekomme ich die XML-Datei auch per HTTP-POST zum Server 
gebeamt, dann muss ich aber der POST-Variablen einen Namen geben. CURL 
braucht das nicht (siehe Beispielcode).
Kann es sein, dass die "#8221" der Name der POST-Variablen ist?

Beispielcode mit CURL:
1
$ch = curl_init();
2
curl_setopt($ch, CURLOPT_URL, “https://www .... Accept”);
3
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
4
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
5
curl_setopt($ch, CURLOPT_HEADER, 0);
6
curl_setopt($ch, CURLOPT_POST, 1);
7
curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlRequest);
8
curl_setopt($ch, CURLOPT_TIMEOUT, 3600);
9
$xmlResponse = curl_exec ($ch);
Mein Code in Xojo:
1
dim d as new dictionary
2
d.value("#8221")=xmlRequest
3
https_sock.setformdata(d)
4
result=https_sock.post("https://www .... Accept")

Bekomme als Antwort aber immer nur eine Fehlermeldung "... xml is well 
formed but not valid". Das XML ist aber so kurz (20 Zeilen) und einfach 
und übersichtlich, da kann man eigentlich keinen Fehler machen. Auch 
andere Beispieldateien aus dem Web gehen nicht. :-(( Tips?

von Peter II (Gast)


Lesenswert?

Frank E. schrieb:
> Bekomme als Antwort aber immer nur eine Fehlermeldung "... xml is well
> formed but not valid". Das XML ist aber so kurz (20 Zeilen) und einfach
> und übersichtlich, da kann man eigentlich keinen Fehler machen. Auch
> andere Beispieldateien aus dem Web gehen nicht. :-(( Tips?

auf jeden Fall musst du die gleiche URL verwenden, also auch das &# mit 
dran schreiben.

Bei Post muss es nicht zwingend namen für Variablen geben. Man kann auch 
einfach Daten posten, also das XML.

Wenn man jetzt noch wüsste welches Sprache und Framework du nutzt, 
könnte man eventuell helfen.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Peter II schrieb:

> auf jeden Fall musst du die gleiche URL verwenden, also auch das &# mit
> dran schreiben.

Also wenn ich &# an die URL hänge (oder nur eines von beiden), bekomme 
ich eine Fehlermeldung 404 (Server bzw. URL nicht gefunden).


> Bei Post muss es nicht zwingend namen für Variablen geben. Man kann auch
> einfach Daten posten, also das XML.

Ja, habe ich auch schon gemacht d.value("")=xmlrequest, Ergebnis ist 
selbige Meldung wie Oben beschrieben (... not valid ...).

>
> Wenn man jetzt noch wüsste welches Sprache und Framework du nutzt,
> könnte man eventuell helfen.

Sprache ist Xojo, schrieb ich schon oben, ist ein OOP-Basic. Die 
Originalcodes mit CURL sind PHP (sieht man am $ vor jeder Variablen), 
aber davon will ich ja weg.

: Bearbeitet durch User
von Peter II (Gast)


Lesenswert?

Frank E. schrieb:
> Ja, habe ich auch schon gemacht d.value("")=xmlrequest, Ergebnis ist
> selbige Meldung wie Oben beschrieben (... not valid ...).

dann fügt er vermutlich immer noch ein "=" in die Daten ein.

> Also wenn ich &# an die URL hänge (oder nur eines von beiden), bekomme
> ich eine Fehlermeldung 404 (Server bzw. URL nicht gefunden).
stimmt das # und alles was danach kommt wird ja nicht zum Server 
übertragen, vermutlich entfernt curl das automatisch.

Frank E. schrieb:
> Sprache ist Xojo, schrieb ich schon oben, ist ein OOP-Basic.

ok, wusste nicht das das eine Sprache ist. Da kann ich nicht 
weiterhelfen.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Ich habe es jetzt nochmal ausführlich getestet: Exakt ein und die selbe 
XML-Datei wird per PHP/CURL akzeptiert, per HTTP-POST jedoch nicht ("... 
well formed but not valid ...").

Also: Was macht CURL anders als HPPT-Post?

Muss ich wirklich erst Wireshark auspacken, oder weiss das jemand? 
Danke.

von Peter II (Gast)


Lesenswert?

Frank E. schrieb:
> Also: Was macht CURL anders als HPPT-Post?

wie schon oben geschrieben, er versucht das ganze in Variabel zu packen. 
Du darfst vermutlich nicht mit d.value arbeiten sondern d.content oder 
so.

von bluppdidupp (Gast)


Lesenswert?

1
curl_setopt($ch, CURLOPT_URL, “https://www .... Accept”);
” ist ein html-kodiertes doppeltes Anführungszeichen. Vermutlich 
also ein Copy+Paste Fehler, die Zeile sollte wohl eher so aussehen:
1
curl_setopt($ch, CURLOPT_URL, "https://www .... Accept");

Sofern kein Formular* zum Server gesendet werden soll, sondern direkt 
XML wird vermutlich statt setformdata() eher diese Funktion relevant 
sein:
http://docs.xojo.com/index.php/HTTPSecureSocket.SetRequestContent
(Content-Type ist dann üblicherweise "text/xml" oder "application/xml")

*https://www.w3.org/TR/html401/interact/forms.html#h-17.13.4

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

bluppdidupp schrieb:

> XML wird vermutlich statt setformdata() eher diese Funktion relevant
> sein:
> http://docs.xojo.com/index.php/HTTPSecureSocket.Se...
> (Content-Type ist dann üblicherweise "text/xml" oder "application/xml")

Hammer! Danke! Genau das war es ... man lernt nie aus. :-)))

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.