Forum Discussion
bdo_isd_28658
Nimbostratus
Feb 20, 2007iRule for replacing string in HTTP POST
I am having trouble even getting started on this iRule and would love some help.
We have an application (TAM) that is sending an incorrect HTTP POST to a back end application (APEX). We need to add an additional parameter to the HTTP POST.
My HTTP Header that needs changing is currently:
POST /pls/htmldb/wwv_flow.accept HTTP/1.1
Host: oratst1:7777
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Proxy-Connection: keep-alive
Referer: http://oratst1:7777/pls/htmldb/f?p=105
Cookie: ORACLE_PLATFORM_REMEMBER_UN=ADMIN:AMS_TST
Content-Type: application/x-www-form-urlencoded
Content-Length: 210
p_flow_id=105&p_flow_step_id=101&p_instance=9615267773042070588&p_page_submission_id=96363&p_request=LOGIN&p_t01=username&p_arg_names=1035622032913287&p_t02=password&p_md5_checksum=
I need the last line of the header above to actually read:
p_flow_id=105&p_flow_step_id=101&p_instance=9615267773042070588&p_page_submission_id=96363&p_request=LOGIN&p_arg_names=1035510424913285&p_t01=bdoadmin&p_arg_names=1035622032913287&p_t02=standard&p_md5_checksum=
The addition of "&p_arg_names=1035510424913285" is the change.
Could anyone suggest a starting point? What event to use for this?
Thank you & Kind Regards
Kate (kate.spath@bdo.co.uk)
6 Replies
- Cole_Libby_1665
Altostratus
Are there any restrictions for replacing the header portion of the POST.
My code seems to blank it out altogether.
if { $method equals "POST"} {
log local0. "----------------------------"
set method [HTTP::method]
log local0. "method = $method"
log local0. [HTTP::header POST]
set newpost [concat $path$basename HTTP/1.1]
log local0. "newpost = $newpost"
HTTP::header replace "POST" $newpost
log local0. "POST + [HTTP::header POST]"
log local0. "----------------------------"
}
Which generates:
Feb 20 18:43:39 tmm tmm[12387]: Rule IAJB : ----------------------------
Feb 20 18:43:39 tmm tmm[12387]: Rule IAJB : method = POST
Feb 20 18:43:39 tmm tmm[12387]: Rule IAJB : //stgws04.nyenet.state.ny.us/siteminderagent/dmsforms/doLogin.fcc HTTP/1.0
Feb 20 18:43:39 tmm tmm[12387]: Rule IAJB : newpost = /siteminderagent/dmsforms/doLogin.fcc HTTP/1.1
Feb 20 18:43:39 tmm tmm[12387]: Rule IAJB : POST +
Feb 20 18:43:39 tmm tmm[12387]: Rule IAJB : ----------------------------
Cole - hoolio
Cirrostratus
Using the original poster's request example with a request line of "POST /pls/htmldb/wwv_flow.accept HTTP/1.1", the request method is POST, which you can get/set using [HTTP::method]. The URI (in f5's terminology) is /pls/htmldb/www_flow.accept, which you can get/set using [HTTP::uri]. The version is 1.1, which you can get/set using [HTTP::version].
I didn't expect the HTTP::header command to actually work against the request line. It looks like TMM might be seeing "POST http://..." and parsing it as a header by grabbing everything up to the ":". That's just a guess though, seeing as the value of that header is "//stgws04.nyenet.state.ny.us/siteminderagent/dmsforms/doLogin.fcc HTTP/1.0"
If you want to modify the request method, the URI or the version, you should be able to use the individual HTTP:: commands to do so (HTTP::method, HTTP::uri, HTTP::version). I think this would actually be simpler if you're just trying to change the version of the request.
Aaron - Cole_Libby_1665
Altostratus
Aaron,
Thanks for the reply. My confusion now comes from the issue that after setting the URI, I get different responses from [HTTP::header POST] and [HTTP::uri].
This code:
if { $method equals "POST"} {
log local0. "-----------POST-----------------"
log local0. [HTTP::uri]
log local0.[HTTP::method]
log local0. [HTTP::header POST]
log local0. [HTTP::version]
log local0. "-----------POST-----------------"
}
Produces this log:
Feb 20 21:53:17 tmm tmm[12387]: Rule IAJB : -----------POST-----------------
Feb 20 21:53:17 tmm tmm[12387]: Rule IAJB : /siteminderagent/dmsforms/doLogin.fcc
Feb 20 21:53:17 tmm tmm[12387]: Rule IAJB : POST
Feb 20 21:53:17 tmm tmm[12387]: Rule IAJB : //stgws04.nyenet.state.ny.us/siteminderagent/dmsforms/doLogin.fcc HTTP/1.0
Feb 20 21:53:17 tmm tmm[12387]: Rule IAJB : 1.1
Feb 20 21:53:17 tmm tmm[12387]: Rule IAJB : -----------POST----------------- - Colin_Walker_12Historic F5 AccountThose responses look the same to me, save the fact that the POST header still contains the domain name and HTTP version. Other than that, those are the same URI requests, right?
Colin - Cole_Libby_1665
Altostratus
Again thanks for the reply.
I'd like to remove the domain name from the post header. Posts without the F5 in the loop do not have the domain name in the Post hearder. I get a server error from the backside so I'd like to make everything as consistent as possible to isolate my problem.
Cole - hoolio
Cirrostratus
Hi Cole,
When testing directly to the web server, do you see the full URL in the URI? ie, is the request formatted like this:
POST http://example.com/path/to/file.ext HTTP/1.1
Or is it like this?
POST /path/to/file.ext HTTP/1.1
What's it like when the BIG-IP is used?
I wouldn't expect that BIG-IP would modify any of the HTTP content unless you're doing it explicitly in a rule.
You can use LiveHttpHeaders for Firefox or IEwatch for IE to check the headers being sent and received on the client. You could also capture a tcpdump and review the headers received and sent by the BIG-IP.
Regardless, RFC2616 on HTTP 1.1 states that servers must accept either format. Check this post for details on the RFC and/or removing the fully qualified portion of the URL in the URI (Click here).
Aaron
Recent Discussions
Related Content
DevCentral Quicklinks
* 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
Discover DevCentral Connects
