HTTPCLient()-Response

Vom Front-End bis SOAP.

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13024
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

HTTPCLient()-Response

Beitrag von Jan » Sa, 21. Jul 2018 20:16

Hallo,

vor einiger Zeit habe ich ein Programm auf den HTTPClient() umgestellt. Mit Hilfe der XUG-Osnabrück-Jungs hatte ich das ans Laufen bekommen. Und es läuft auch absolut sauber und schnell.

Jetzt muß ich aber auch ein POST-Request machen. Das funktioneirt irgendwie anders als bei GET-Requests. Da bekomme ich als Rückgabe per cRueckgabe := oHc:send() den Response in cRueckgabe rein. Bei POST ist das aber leer. Stattdessen wird das in das oHc-Objekt geschrieben. Aber leider kann ich da nicht drauf zugreifen.

Das hier ist der ntsperchende Baum im oHc-Objekt im ObjectInspector:
ObjectInspector.jpg
ObjectInspector.jpg (162.93 KiB) 365 mal betrachtet
Eine Abfrage auf oHc:httpresponse gibt mir ein "Result: HttpResponseMessage". Eine Abfrage auf oHc:httpresponse:headers gibt dagegen ein "Membervariable ist für dieses Objekt unbekannt" zurück. Obwohl das im Objektbaum drin steht.

Offensichtlich habe ich da ein massives Verständnisproblem.

Wie also komme ich jetzt an die Response-Daten ran?

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

ramses
Programmier-Gott
Programmier-Gott
Beiträge: 1000
Registriert: Mi, 28. Jul 2010 17:16

Re: HTTPCLient()-Response

Beitrag von ramses » So, 22. Jul 2018 17:19

Hallo Jan

ich kenne die GET, POST .... Abfragemethoden nur im Zusammenhang mit JavaScript oder xb2net hier ist der Zugriff auf den Inhalt bei beiden Methoden identisch. Der Unterschied der beiden ist ja nur die unbegrenzte Datenlänge bei POST und anderes Verhalten im Browser(unsichtbar, nicht Cache-bar, Bookmark-bar). Wenn du sicher bist dass dein Request korrekt ist und der Server eine korrekte Antwort sendet wendest du dich vermutlich am besten an Alaska. Deren HTTP-Client ist ja noch in Ausbildung...... du hast doch einen heissen Draht zu denen.

Gruss Carlo

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13024
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: HTTPCLient()-Response

Beitrag von Jan » Mo, 23. Jul 2018 9:08

Hallo Carlo,

bislang habe ich mit RESTfull API per LoadFromUrl() (Version von Phil und Xbase++), Sockets, und HTTPClient() gearbeitet. Wobei LoadFromUrl() in der Alaska-Version inzwischen auch mehr kann als nur GET und POST. Ich benutze ebenfalls HEAD (das kann LoadFromUrl() aber meines Wissens nicht) und DELETE. Ist also mit reinen Alaska-Bordmitteln absolut reibungslos handhabbar.

Ich habe inzwischen festgestellt, das Alaska aus welchem Grund auch immer sehr unterschiedlich mit Rückgaben auf POST-Requests arbeitet. Bei der Anmeldung bei der Datenbank bekomme ich die benötigten Daten (SessionID) als normalen Rückgabewert geliefert, wie auch schon bei GET-Requests gewohnt. Das kann ich dann auslesen als cRueckgabe := oHc:send(). Wenn ich aber umfangreichere Daten sende, die in der Datenbank gespeichert werden sollen, dann bekomme ich nur einen Leerstring zurück. Und die Rückgabe steht in dem Zweig, den ich oben als Screenshot gepostet habe.

Ich bin inzwischen auch dahinter gekommen, wie ich den zumindest teilweise auslesen kann. Das ist oHc:respondmessage:getHeader(). Der wiederum hat dann aber den Nachteil, das ich da einfach nur ein mehrdimensionales Array zurück bekomme, kein DataObject. Und ich kann dieses Array auch nicht in ein DataObject wandeln.

Ich werd in der Tat mal Alaska kontakten, was das alles soll. Ich würde mir das alles einfacher und stringenter vorstellen.

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

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13024
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: HTTPCLient()-Response

Beitrag von Jan » Mo, 23. Jul 2018 12:01

OK. Supportanfrage ist von Alaska sehr schnell beantwortet worden. Oder sollte ich besser sagen, es wurde schnell reagiert?

Grundaussage: Warum zur Hölle (wörtliches Zitat!) ich da keinen Code mitschicken würde. Das ich angeboten hatte, Code zu schicken, aber gehofft hatte, die könnten mir auf Grund der Beschreibung der merkwürdigen und unterschiedlichen Verhaltensweisen einen Hinweis geben, ist vollkommen ignoriert worden.

Außerdem gab es den Hinweis, das HTTPResponse absolut korrekt arbeiten würde. Kein Wort dazu, das ich aber über oHc:httpresponse:header nicht darauf zugreifen kann, und bei Abfrage von oHc:httpresponse:getHeader() einfach nur ein Array kommt, dazu kein Wort.

Das ansonsten es den Hinweis gab, den Statuscode per :getStatusCode() zu beachten, und die Bitte doch die Doku der Schnittstelle mitzuliefern, soll nicht unerwähnt bleiben. Ersteres mache ich selbstverständlich, zweiteres nützt nichts weil das keinen Hinweis gibt, warum eine Antwort in einen Rückgabewert als JSON-String und der andere Rückgabewert in das DataObject überführt wird, auf den inn dem DataObject nicht direkt zugegriffen werden kann und dessen Export kein DataObject ist (ja, das ist jetzt ironisch gemeint!). Wobei ich jetzt mal vermute das die Entwickler der Schnittstelle keine Ahnung davon haben, was Xbase++ ist bzw. die internen Abläufe in DataObjects da nicht kennen.

Keine Ahnung, wer das beantwortet hat. Derjenige/diejenige hielt es für angebracht, keinen Namen darunter zu setzen. Ich bin mir allerdings sehr sicher, das es nicht Till war, der würde sich niemals so ausdrücken - außer der hat irgendwo noch einen Mr. Hyde bei sich, der da ab und an mal vorlugt ;-)

Im Moment bin ich jetzt erstmal einfach nur gefrustet.

Zum Glück läuft der Code jetzt ja. Ich habe also nicht das Problem, das ich das ganze Projekt einstampfen müsste. Aber meine Fragen sind halt offen. Und das stört mich.

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

Antworten