HTTPClient PUT [Erledigt]

Vom Front-End bis SOAP.

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

HTTPClient PUT [Erledigt]

Beitrag von Jan »

Moin,

zum ersten Mal muß ich eine Datei hochladen per PUT. Hat das schon mal jemand gemacht? Wie muß ich da die Datei angeben?

Jan
Zuletzt geändert von Jan am Mi, 07. Jun 2023 8:45, insgesamt 1-mal geändert.
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
adrian
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Mo, 08. Mai 2006 8:58
Wohnort: Aadorf TG
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: HTTPClient PUT

Beitrag von adrian »

Hoi Jan

Ich habe da eine ganze Kommunikation aufbauen müssen, habe ich aber alleine aus der Doku auch nicht fertiggebracht, benötigte ein paar Tipps von Andreas.

Die Header kannst Du als Beispiel nehmen, da ich diese Felder übertragen muss

Vielleicht hilft Dir dieses Beispiel

Code: Alles auswählen

oHC := HttpClient():new(Hier der entsprechende URL)
oHC:setMethod("PUT")
oHC:httpRequest:addHeader("X-CLIENT-ID", AppIni():GetEntry("ORTHO","CLIENTID"))
oHC:httpRequest:addHeader("Authorization", "Basic "+AppIni():GetEntry("ORTHO","AUTHHEADER"))
oHC:httpRequest:addHeader("Content-Type", "application/json" )
oHC:httpRequest:setContent('{ "notificationFetched": true }' )
oHC:setOption( "ignore-cert-error", .T. )
sZ := oHC:send()
es Grüessli

Adrian
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: HTTPClient PUT

Beitrag von Jan »

Hallo Adrian,

ja, die Doku zum HTTPClient ist eher minimalistisch. Ich arbeite da viel mit, aber ohne Starthilfe durch Alaska hätte das bei mir auch nicht geklappt. Inzwischen klappt das auch alleine recht gut. Nur hier stolpere ich, weil ich noch nie eine Datei per PUT hochgeladen habe. Und die Doku dazu rein überhaupt gar nichts hergibt. Außer natürlich das es ein PUT gibt ...

Leider hilft Dein Beispiel mir nicht weiter. Denn Du lädst da keine Datei hoch.

Es scheint so als ob das relativ simpel geht. Ich habe das aktuell so gebaut:

Code: Alles auswählen

       oHC             := HttpClient():new(oDoDatei:uploadURL)
       oHC:setAcceptType("application/json")
       oHC:httpRequest:setContentType("application/pdf")
       oHC:setMethod("PUT")
       oHC:httpRequest:setContent(cDateiNameInklusivPfad)
       cResult         := oHC:send()
       nStatus         := oHc:getStatusCode()                                                      // Nur für Überprüfungszwecke
       cStatus         := oHc:getStatusText()                                                      // Nur für Überprüfungszwecke
       aRueckmeldungen := oHc:httpResponse:getHeaders()                                            // Nur für Überprüfungszwecke
       oHc:disConnect()
       oHc             := NIL
nStatus ist 200, cStatus "OK", und cResult "". Aktuell kann ich aber nicht kontrollieren, ob die Datei wirklich oben ist. So ganz sicher bin ich mir deswegen noch nicht.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: HTTPClient PUT

Beitrag von Martin Altmann »

Jan,
wäre es nicht erfolgreich (provoziere es doch einfach mal!), solltest Du einen anderen Status und cresult erhalten.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
adrian
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Mo, 08. Mai 2006 8:58
Wohnort: Aadorf TG
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: HTTPClient PUT

Beitrag von adrian »

Ja, Jan, da hast Du natürlich Recht, hochladen mache ich über die Send() Funktion.

Hier 1:1 von meinem Code, mehr als Gedanken-Stütze für diejenigen welche einen Ankick benötigen :wink:

Code: Alles auswählen

FUNCTION MediData_Send(sFile,lRet)
	LOCAL oHC, aResponse, sZ, nZ, nZ2, sXmlString, oMessagePart

   oHC := HttpClient():new(AppIni():GetEntry("ORTHO","BASISURL")+"ela/uploads")
   oHC:setMethod("POST")
   oHC:httpRequest:addHeader("X-CLIENT-ID", AppIni():GetEntry("ORTHO","CLIENTID"))
   oHC:httpRequest:addHeader("Authorization", "Basic "+AppIni():GetEntry("ORTHO","AUTHHEADER"))
   oHC:httpRequest:addHeader("Content-Type", "multipart/form-data" )
	oHC:setOption( "ignore-cert-error", .T. )

   sXmlString := MemoRead( sFile)
   oMessagePart := oHC:HttpRequest:addPart()
   oMessagePart:addHeader( "Content-Disposition", 'form-data; name="elauploadstream"; filename="' + sFile + '"' )
   oMessagePart:addHeader( "Content-Type", "application/octet-stream" )
   oMessagePart:addHeader( "Content-Transfer-Encoding", "binary" )
   oMessagePart:setContent( sXmlString )
	aResponse := Json2Var(oHC:send())
RETURN IF(lRet,aResponse[1],.T.)
es Grüessli

Adrian
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: HTTPClient PUT

Beitrag von Jan »

Martin,

stimmt, dann gibt es diverse Fehlermeldungen. Aber ich arbeite auch mit einem Shopsystem, das ich per REST-API anspreche. Und das gibt mir selbst bei Problemen ein true zurück. Daher meine Bedenken, das ich ohne wirkliche Kontrolle nicht sicher bin.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: HTTPClient PUT

Beitrag von Tom »

Ich nutze für all das Chilkat. Da kann ich mir direkt aus Postman oder Swagger den (Foxpro-)Code erzeugen lassen (sogar kostenlos online), und es gibt Beispiele bis zum Horizont. Und die JSON-Weiterverarbeitung ist, sorry for that, auch viel besser und robuster als in Xbase++.

Um zu schauen, wo die Parameter hingehören und wie die Rückgaben aussehen, mag das auch hilfreich sein. Und mit Postman sollte man sich sowieso befassen, wenn man in diesem Segment unterwegs ist.
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: HTTPClient PUT

Beitrag von Jan »

Moin,

gerade kam vom Betreiber des API die Info, das hier eine 200 ganz klar die Aussage ist, das die Datei auf deren Server angekommen ist. Also Problem gelöst.

Danke für alle Tipps und Hinweise.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: HTTPClient PUT [Erledigt]

Beitrag von nightcrawler »

https://de.wikipedia.org/wiki/HTTP-Statuscode
200 OK Die Anfrage wurde erfolgreich bearbeitet und das Ergebnis der Anfrage wird in der Antwort übertragen.
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: HTTPClient PUT [Erledigt]

Beitrag von Jan »

Joachim,

ich weiß ja das 200 heißt das alles ok war. Aber es gibt in diesem Fall halt keine textliche Bestätigung. Und wie ich schrieb - nach den Erfahrungen mit dem Onlineshop (bei dem das per SOAP läuft, aber das macht hier auch keinen Unterschied) glaub ich dem nicht mehr so lange ich keine sonstige Bestätigung dazu habe. Ich bin da etwas vorsichtig geworden. In anderen Fällen schau ich dann z. B. nach, ob die Daten wirklich auf dem Server liegen. Was aber in diesem Fall nicht geht. Ich mußte also auf den IT-Menschen dort warten, der das für mich überprüft hat.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten