Forum Discussion
Problem with output of E-Tag in iRule
Trying to output an E-Tag, the output does not match the input and I can't figure out how to do it. Looks like it should be easy, but have spent too much time on it, so asking here.
My simple iRule to test with:
when HTTP_REQUEST {
log local0. "test header- [HTTP::header values X-Test]"
}
Test1:
curl http:// -H 'X-Test: "test"'
-
: test header- {"test"}
Test2:
curl http:// -H 'X-Test: W/"test"'
-
: test header- W/\"test\"
I want output to look like this, respectively:
: test header- "test"
: test header- W/"test"
There must be an easy way to do it, I am just not good enough with iRules. TCL lets me do it:
$ tclsh
% puts {"test"}
"test"
% puts W/\"test\"
W/"test"
Please help.
2 Replies
- nitass
Employee
just wondering if we can use simple tcl string.
config root@(ve11c)(cfg-sync In Sync)(Active)(/Common)(tmos) list ltm rule qux ltm rule qux { when HTTP_REQUEST { log local0. "test header- [string map {\\ ""} [HTTP::header values X-Test]]" } } /var/log/ltm Apr 21 12:41:41 ve11c info tmm1[5649]: Rule /Common/qux : test header- W/"test" - stevehuffy
Nimbostratus
Yeh, thanks. Was hoping for something more generic that would support other headers, but I guess similar will do for my use case, as E-Tags seem to only have a specific format. I am not sure why HTTP::header adds more characters to the actual HTTP header, but would have thought something like this would have reformatted: [puts [HTTP::header values X-Test]], but can't find anything easily.
So I am now doing this (hopefully it will provide the original E-Tag ok - it will be going in a 304 response):
log local0. "from irule HTTP::headers- [HTTP::header values X-Test]" log local0. "to get it to original- [string map {\\\" "\""} [string trim [HTTP::header values X-Test] \{\}]]"Test1
$ curl http:// -H 'X-Test: "test"' - : from irule HTTP::headers- {"test"} : to get it to original- "test"Test2
$ curl http:// -H 'X-Test: W/"test"' - : from irule HTTP::headers- W/\"test\" : to get it to original- W/"test"Test3 (the iRule doesn't handle this, but hopefully an E-tag is never formatted like this)
$ curl http:// -H 'X-Test: W/"ba8ba5c\"37e1fce1:0"' - : from irule HTTP::headers- {W/"ba8ba5c\"37e1fce1:0"} : to get it to original- W/"ba8ba5c"37e1fce1:0"
Help guide the future of your DevCentral Community!
What tools do you use to collaborate? (1min - anonymous)Recent Discussions
Related Content
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com