PDA

View Full Version : HTTPPOSTCLOB Authorization Header send to redirect



Malte
10-05-23, 12:49
Moin Zusammen,

ich bin grade dabei ein REST Web Service mit der Funktion SYSTOOLS.HTTPPOSTCLOBVerbose anzusprechen.

Das Funktioniert soweit auch ganz gut nur habe ich leider das Problem das der Response hinter einem redirect ist.

Der redirect funktioniert soweit auch nur wird mein HTTP Header mit meine Login Daten leider nicht weitergeleitet. Ich hab im Internet gefunden das man beim HTTP Client extra erlauben muss, nur leider nicht wie das auf der AS400 geht :(

Weiß jemand ob man irgendwie einstellen kann das dieser weitergeleitet wird ?

Hier ist meine Funktion mit der ich es versuche:


<httpheader includeerrormsg="true"><httpheader includeerrormsg="true"> SELECT IfNull(responseMsg, ''), VarChar(IfNull(responseHttpHeader, ''), 1500)
FROM table (
SYSTOOLS.HTTPPOSTCLOBVerbose('http://server:9090/api/content/search',
'<httpHeader includeErrorMsg="true"><header name="Authorization" value="Basic adfssadfsadf /><header name="Content-Type" value="application/json"/></httpHeader>', '{
"stores": ["Test"],
"columns": ["Betriebsnummer", "Rechnungsnummer", "Kundennummer"],
"conditions":{
"Betriebsnummer" : "01",
"Rechnungsnummer" : "1234567"
}
<header name="Authorization" value="Basic adfssadfsadf /><header name=" content-type"=""><header name="Authorization" value="Basic adfssadfsadf /><header name=" content-type"="">}' )) as Ws;

Mit freundlichen Grüßen
Malte </header></header></httpheader></httpheader>

Andreas_Prouza
10-05-23, 13:14
Hallo Malte,

ich glaube was du suchst ist: CORS.
Dafür setzt du im HTTP-Header den Key-Value: Access-Control-Allow-Origin *

Ich würde nebenbei auch auf die SQL Table Function QSYS2.HTTP_POST_VERBOSE umsteigen.
Diese ist schneller, da sie in C geschrieb wurde.



SELECTt1.*
FROM
TABLE (qsys2.HTTP_POST_VERBOSE('http://server:8093/path',
'{ "p_Firstname" : "Max", "p_Lastname" : "Mustermann" }',
'{"header" : "Content-Type,application/json",
"header" : "Accept,application/json",
"header" : "Access-Control-Allow-Origin,*"}')
) t1


lg Andreas

Malte
10-05-23, 13:50
Moin Andreas,

danke für die schnelle Antwort, ich hab das jetzt so umgebaut

SELECT t1.*
FROM
TABLE (qsys2.HTTP_POST_VERBOSE('http://server:9090/api/content/search',
'{"stores":["Belege_2022"],"columns":["Betriebsnummer","Rechnungsnummer","Kundennummer"],"conditions":{"Betriebsnummer":"01","Rechnungsnummer":"123456"}}',
'{"header" : "Content-Type,application/json",
"header" : "Authorization,Basic sdsdsadsadasd",
"header" : "Access-Control-Allow-Origin,*",
"redirect" : "5"}')
) t1

Leider bekomm ich dann einfach das also Antwort, ich kann zwar dann manuell die nächste Anfrage machen, schöner wäre es aber gleich den response zu bekommen. Das redirect in den Optionen scheint der einfach zu ignorieren :(
{
"HTTP_STATUS_CODE": 303,
"Date": "Wed, 10 May 2023 12:29:29 GMT",
"Location": "http://server:9090/api/content/results/0c7e573d1c1a4c95db3aa465713b84a4/pages/first",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Headers": "origin, content-type, accept, authorization",
"Access-Control-Allow-Credentials": true,
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS, HEAD",
"Access-Control-Max-Age": 1000000,
"Content-Length": 0,
"Server": "Jetty(9.4.44.v20210927)"
}

Fuerchau
10-05-23, 16:58
Das hat auch nichts mit CORS zu tun, denn das ist ein Browser-Feature.

"CORS (Cross-Origin Resource Sharing) beschreibt eine Funktion mit der eine Website auf Daten einer fremden Domain zugreifen kann. CORS ermöglicht, dass Webbrowser domainübergreifend verschiedene Webanwendungen in einer Oberfläche kombinieren können."

Wenn du die Fehlermeldung mal liest:
https://www.fairrank.de/glossar/status-code-303/
bedeutet das wohl, dass in der Antwort "Location" die Adresse der angeforderten Daten nun liegt, die du nur mit einem GET abholen musst.
Beachte allerdings, dass die Angabe ".../pages/first" auf Folgeseiten hindeuten kann, die dann seitenweise anbzurufen sind.
Wieviele Seiten es dann sind, steht u.U. an den abgeholten Daten.

Malte
11-05-23, 13:51
Ok ich hatte gehofft das man den Redirect response auch gleich bekommen kann da dieses in SoapUI funktioniert hatte.

Das mit dem GET Request auf die URL aus Location funktioniert auch.

Wegen den zusätzlichen Seite hab ich nichts zu befürchten da ich mit meiner Anfrage immer nur ein Ergebnis zurück bekommen sollte.

Wegen den Funktionen aus der qsys2 musste ich beim letzten Request leider doch wieder die aus der systools nehmen da die Funktion mit BLOB Response noch nicht in der qsys2 verfügbar ist(erst beim nächsten PTF Update)