Gelöst Webrequest: Response Header des Servers herausfiltern

deutschevita

Aktives Mitglied
7. November 2015
48
6
Hallo liebe Community,

über einen Webrequest mit Antwort lässt sich fantastisch viel erledigen und genau das soll auch passieren. Funktioniert auch alles super, ein Problem gibt es aber:

JTL-Wawi schreibt die komplette Antwort inklusive Server Header in die entsprechenden Felder. Damit kann ich natürlich nichts anfangen.
Beispiele: Antwort des Scripts ist eine URL oder ein HTML formatierter Text.

JTL schreibt dann bspw. folgendes in das entsprechende Feld:

Vary=Accept-Encoding
Content-Encoding=
Keep-Alive=timeout=5, max=100
Connection=Keep-Alive
Content-Length=389
Content-Type=text/html; charset=UTF-8
Date=Fri, 09 Feb 2018 12:09:25 GMT
Server=Apache

<html>
<p>some text</p>
</html>

Wobei ich nur den Teil unter der freien Zeile behalten möchte. Über Werte setzen kann ich das Ergebnis nun noch über Liquid nachbearbeiten. Mir ist aber keine Funktion bekannt, die hier zuverlässig den Header entfernt.

Hat jemand eine Idee? Oder sieht nochjemand Bedarf nach einer Checkbox im Workflow "Remove Header" oder ähnliches? Der gehört eigentlich nicht da rein und der Sinn erschließt sich mir nicht so wirklich.

Liebe Grüße!
 

fav-hosting.online

Sehr aktives Mitglied
16. Oktober 2012
780
60
Weiterstadt
Firma
FaV-Hosting
Hi,

es gibt 2 Möglichkeiten die mir spontan einfallen wobei die erste nicht perfekt ist.
Da wir noch auf einer Version < 1.3 sind musste ich eine Serverantwort mit Capture festlegen.
Den ersten Part brauchst du nicht er stellt nur die simulierte Serverantwort dar.

Part 1: Serverantwort
Code:
{% capture htmlresponse %}
Vary=Accept-Encoding
Keep-Alive=timeout=5, max=100
Connection=Keep-Alive
Content-Length=389
Content-Type=text/html; charset=UTF-8
Date=Fri, 09 Feb 2018 12:09:25 GMT
Server=Apache

<html>
<p>some text</p>
</html>
{% endcapture %}

Part 2 (Möglichkeit 1): Die eigentlichte verarbeitung der Serverantwort, ich habe hierzu die Variable htmlresponse verwendet.
Nachteil bei dieser Methode ist das neue Zeilen durch "<br />" ersetzt werden.
Der Body ist zumindest bei Apache und Nginx immer durch eine Leerzeile getrennt.
Dadurch kannst du mit der Funktion Split nach 2 aufeinanderfolgenden Zeilenumbrüchen suchen.

Code:
{% assign htmlbody = htmlresponse | NewlineToBr | StripNewlines | Split: '<br /><br />' %}
{{ htmlbody[1] }}


Part 2 (Möglichkeit 2): Diese Lösung funktioniert nur wenn der beginn des Bodys immer der selbe ist z.B. "<html>".
Ist im Prinzip das selbe wie die erste Möglichkeit nur das in diesem Fall die Zeilenumbrüche der Antwort erhalten bleiben.
Code:
{% assign htmlbody = htmlresponse | Split: '<html>' %}
{{ htmlbody[1] | Prepend: '<html>'}}
 
  • Gefällt mir
Reaktionen: deutschevita

deutschevita

Aktives Mitglied
7. November 2015
48
6
Hi,

es gibt 2 Möglichkeiten die mir spontan einfallen wobei die erste nicht perfekt ist.
Da wir noch auf einer Version < 1.3 sind musste ich eine Serverantwort mit Capture festlegen.
Den ersten Part brauchst du nicht er stellt nur die simulierte Serverantwort dar.

Part 1: Serverantwort
Code:
{% capture htmlresponse %}
Vary=Accept-Encoding
Keep-Alive=timeout=5, max=100
Connection=Keep-Alive
Content-Length=389
Content-Type=text/html; charset=UTF-8
Date=Fri, 09 Feb 2018 12:09:25 GMT
Server=Apache

<html>
<p>some text</p>
</html>
{% endcapture %}

Part 2 (Möglichkeit 1): Die eigentlichte verarbeitung der Serverantwort, ich habe hierzu die Variable htmlresponse verwendet.
Nachteil bei dieser Methode ist das neue Zeilen durch "<br />" ersetzt werden.
Der Body ist zumindest bei Apache und Nginx immer durch eine Leerzeile getrennt.
Dadurch kannst du mit der Funktion Split nach 2 aufeinanderfolgenden Zeilenumbrüchen suchen.

Code:
{% assign htmlbody = htmlresponse | NewlineToBr | StripNewlines | Split: '<br /><br />' %}
{{ htmlbody[1] }}


Part 2 (Möglichkeit 2): Diese Lösung funktioniert nur wenn der beginn des Bodys immer der selbe ist z.B. "<html>".
Ist im Prinzip das selbe wie die erste Möglichkeit nur das in diesem Fall die Zeilenumbrüche der Antwort erhalten bleiben.
Code:
{% assign htmlbody = htmlresponse | Split: '<html>' %}
{{ htmlbody[1] | Prepend: '<html>'}}

Moin Mike!

Danke für deine Antwort. Ich habe das Problem gerade gelöst bekommen, ich denke diese Möglichkeit sollte auch ganz praktikabel sein.
Würde es so lösen:
Normaler Webrequest an das php Skript, das seine Arbeit macht. Vor dem Endergebnis wird das Codeendergebnis ($pre) noch ein Deliminter vorangestellt.
Code:
$delimiter = "<!-- split -->";
$result =  $delimiter . $pre;

Dann kann ich in JTL ganz einfach mein gewünschtes Ergebnis erreichen:

Code:
{{ somewhat.field | Split: '<!-- split -->' | Last }}

Funktioniert hervorragend! :)

Vielliecht hilft es dir / jemand anderem noch! :) Danke nochmals für deine Hilfe!

Lukas / iotex