Seite 1 von 1

HTTPClient PUT [Erledigt]

Verfasst: Di, 06. Jun 2023 14:54
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

Re: HTTPClient PUT

Verfasst: Di, 06. Jun 2023 15:18
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()

Re: HTTPClient PUT

Verfasst: Di, 06. Jun 2023 15:29
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

Re: HTTPClient PUT

Verfasst: Di, 06. Jun 2023 15:38
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

Re: HTTPClient PUT

Verfasst: Di, 06. Jun 2023 15:41
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.)

Re: HTTPClient PUT

Verfasst: Di, 06. Jun 2023 15:45
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

Re: HTTPClient PUT

Verfasst: Di, 06. Jun 2023 15:49
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.

Re: HTTPClient PUT

Verfasst: Mi, 07. Jun 2023 8:45
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

Re: HTTPClient PUT [Erledigt]

Verfasst: Do, 08. Jun 2023 14:01
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.

Re: HTTPClient PUT [Erledigt]

Verfasst: Do, 08. Jun 2023 14:06
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