HTTP-Post statt CURL_exec?

OP (Firma: Q3) #4624699
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?
Gast #4624711
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.
OP (Firma: Q3) #4624724
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.
Gast #4624729
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.
OP (Firma: Q3) #4624830
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.
Gast #4624913
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren