fpWeb CGI module. lazarus / 38-Networking and Web Programming ---------------------------------------------------------------------- BSaidus · 2023-04-20 11:41 Hello. I'm doing some tests to learn the wonderfull "fpWEB", and I wonder how to : after posting data to server (using GET methode) how to force browser to clear the string parameters to avoid the refresh. here is the code. Code: Pascal [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i // main datamoduleprocedure TWmUccenpf.DataModuleRequest(Sender: TObject; ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);var lContent: String;begin Handled := true; // See if the methode is post if SysUtils.SameText(LowerCase(ARequest.Method ),'get' ) then begin tUcExec.fpLog('Methode GET invoked'); // just log a string tUccenPf.fpProcessUccenPf(ARequest); // do some saving data to file ( db ) end; // send content to browser 'html template from file' AResponse.ContentType := 'text/html'; lContent := tUccenPf.fpProcessCountent(); // Get content from html tempplate AResponse.Content := lContent; AResponse.SendContent();end; After returning, in the parameters on URL still exists Code: Pascal [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i https://for um.lazarus.freepascal.org/index.php?action=post;board=38.0// how to redirect to https://forum.lazarus.freepascal.org/index.php So, Is there any way or technique to do this. in PHP just this Code: PHP [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i function fpTools_goto_url($AUrl) { header("location: http://$AUrl") ; exit();} ---------------------------------------------------------------------- Leledumbo · 2023-04-22 00:35 Quote from: BSaidus on April 20, 2023, 01:41:55 pmafter posting data to server (using GET methode) Wait, what? Quote from: BSaidus on April 20, 2023, 01:41:55 pmhow to force browser to clear the string parameters to avoid the refresh. You typically don't for a GET request, but since you said: Quote from: BSaidus on April 20, 2023, 01:41:55 pmin PHP just this What you want to reply is a redirect response: Code: Pascal [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i AResponse.SendRedirect('http://wherever.you/want/to/redirect/it/to'); ---------------------------------------------------------------------- BSaidus · 2023-04-22 08:42 Thank you @Leledumbo. When I said posting data using GET methode I mean like this. Code: Text [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i
Yes, this methode Code: Pascal [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i AResponse.S endRedirect('http://wherever.you/want/to/redirect/it/to'); works well when using GET, and do not work when using POST. Something else, this is a result of quering server variables using fpWeb. Do not you think that there is something messing . Code: Pascal [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i procedure TFPWebModule1.DataModuleRequest(Sender: TObject; ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);var lURL, lURI: String; lContent: String;begin Handled := true; lURI := ARequest.URI; lURL := ARequest.URL; lContent := LineEnding + 'ARequest.Accept : ' + ARequest.Accept + #10#13 + 'ARequest.AcceptCharset : ' + ARequest.AcceptCharset + #10#13 + 'ARequest.AcceptEncoding : ' + ARequest.AcceptEncoding + #10#13 + 'ARequest.AcceptLanguage : ' + ARequest.AcceptLanguage + #10#13 + 'ARequest.Authorization : ' + ARequest.Authorization + #10#13 + 'ARequest.Connection : ' + ARequest.Connection + #10#13 + 'ARequest.ContentEncoding : ' + ARequest.ContentEncoding + #10#13 + 'ARequest.ContentLanguage : ' + ARequest.ContentLanguage + #10#13 + 'ARequest.ContentLength : ' + IntToStr(ARequest.ContentLength) + #10#13 + 'ARequest.ContentType : ' + ARequest.ContentType + #10#13 + 'ARequest.Date : ' + ARequest.Date + #10#13 + 'ARequest.Expires : ' + ARequest.Expires + #10#13 + 'ARequest.From : ' + ARequest.From + #10#13 + 'ARequest.Host : ' + ARequest.Host + #10#13 + 'ARequest.IfModifiedSince : ' + ARequest.IfModifiedSince + #10#13 + 'ARequest.LastModified : ' + ARequest.LastModified + #10#13 + 'ARequest.Location : ' + ARequest.Location + #10#13 + 'ARequest.Pragma : ' + ARequest.Pragma + #10#13 + 'ARequest.Referer : ' + ARequest.Referer + #10#13 + 'ARequest.RetryAfter : ' + ARequest.RetryAfter + #10#13 + 'ARequest.Server : ' + ARequest.Server + #10#13 + 'ARequest.UserAgent : ' + ARequest.UserAgent + #10#13 + 'ARequest.Warning : ' + ARequest.Warning + #10#13 + 'ARequest.WWWAuthenticate : ' + ARequest.WWWAuthenticate + #10#13 + 'ARequest.Via : ' + ARequest.Via + #10#13 + 'ARequest.HTTPAccept : ' + ARequest.HTTPAccept + #10#13 + 'ARequest.HTTPAcceptCharset : ' + ARequest.HTTPAcceptCharset + #10#13 + 'ARequest.HTTPAcceptEncoding : ' + ARequest.HTTPAcceptEncoding + #10#13 + 'ARequest.HTTPIfModifiedSince : ' + ARequest.HTTPIfModifiedSince + #10#13 + 'ARequest.HTTPReferer : ' + ARequest.HTTPReferer + #10#13 + 'ARequest.HTTPUserAgent : ' + ARequest.HTTPUserAgent + #10#13 + 'ARequest.Cookie : ' + ARequest.Cookie + #10#13 + 'ARequest.SetCookie : ' + ARequest.SetCookie + #10#13 + 'ARequest.HTTPXRequestedWith : ' + ARequest.HTTPXRequestedWith + #10#13 + 'ARequest.HttpVersion : ' + ARequest.HttpVersion + #10#13 + 'ARequest.ProtocolVersion : ' + ARequest.ProtocolVersion + #10#13 + 'ARequest.PathInfo : ' + ARequest.PathInfo + #10#13 + 'ARequest.PathTranslated : ' + ARequest.PathTranslated + #10#13 + 'ARequest.RemoteAddress : ' + ARequest.RemoteAddress + #10#13 + 'ARequest.RemoteAddr : ' + ARequest.RemoteAddr + #10#13 + 'ARequest.RemoteHost : ' + ARequest.RemoteHost + #10#13 + 'ARequest.ScriptName : ' + ARequest.ScriptName + #10#13 + 'ARequest.ServerPort : ' + IntToStr(ARequest.ServerPort) + #10#13 + 'ARequest.Method : ' + ARequest.Method + #10#13 + 'ARequest.URL : ' + ARequest.URL + #10#13 + 'ARequest.Query : ' + ARequest.Query + #10#13 + 'ARequest.Content : ' + ARequest.Content + #10#13 ; fpLog(lContent); end; RESULTS: Code: Text [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i ARequest.Server : localhostARequest.ScriptName : /fb1c/index.cgiARequest.ServerPort : 80ARequest.HttpVersion : ARequest.ProtocolVersion : ARequest.Accept : text/html,application/xhtml xml,applic ation/xml;q=0.9,image/avif,image/webp,*/*;q=0.8ARequest.AcceptCharset : ARequest.AcceptEncoding : gzip, deflate, brARequest.AcceptLanguage : en-US,en;q=0.5ARequest.Authorization : ARequest.Connection : keep- aliveARequest.ContentEncoding : ARequest.ContentLanguage : ARequest.ContentLength : 0ARequest.ContentType : ARequest.Date : ARequest.Expires : ARequest.From : ARequest.Host : localhostARequest.IfModifiedSince : ARequest.LastModified : ARequest.Location : ARequest.Pragma : ARequest.Referer : ARequest.RetryAfter : ARequest.UserAgent : Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/112.0ARequest.Warning :ARequest.WWWAuthenticate :ARequest.Via :ARequest.HTTPAccept : text/html,application/xhtml xml,appl ication/xml;q=0.9,image/avif,image/webp,*/*;q=0.8ARequest.HTTPAcceptCh arset :ARequest.HTTPAcceptEncoding : gzip, deflate, brARequest.HTTPIfModifiedSince :ARequest.HTTPReferer :ARequest.HTTPUserAgent : ARequest.Cookie : ARequest.SetCookie : ARequest.HTTPXRequestedWith : ARequest.HttpVersion : ARequest.ProtocolVersion : ARequest.PathInfo : ARequest.PathTranslated : ARequest.RemoteAddress : 127.0.0.1ARequest.RemoteAddr : 127.0.0.1ARequest.RemoteHost : ARequest.Method : GETARequest.URL : ARequest.Query : ARequest.Content : PS: I'm using Lighttpd 1.4.49.1 on windows PHP output this: Code: Text [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i CONTENT_LENGTH 0DOCUMENT_ROOT D:/UccenOS/UccenOS/Servers/lighttpd/htdocsGATEWAY_INTERFACE CGI/1.1HTTP_ACCEPT text/html,application/xhtml+xml,application/xml ;q=0.9,image/avif,image/webp,*/*;q=0.8HTTP_ACCEPT_ENCODING gzip, deflate, brHTTP_ACCEPT_LANGUAGE en-US,en;q=0.5HTTP_CONNECTION keep-aliveHTTP_HOST localhostHTTP_SEC_FETCH_DEST documentHTTP_SEC_FETCH_MODE navigateHTTP_SEC_FETCH_SITE noneHTTP_SEC_FETCH_USER ?1HTTP_UPGRADE_INSECURE_REQUESTS 1HTTP_USER_AGENT Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/112.0REDIRECT_STATUS 200REMOTE_ADDR 127.0.0.1REMOTE_PORT 51430REQUEST_METHOD GETREQUEST_SCHEME httpREQUEST_URI /fb1c/a.phpSCRIPT_FILENAME D:/UccenOS/UccenOS/Servers/lighttpd/htdocs/fb1c/a.phpSCRIPT_NAME /fb1c/a.phpSERVER_ADDR 127.0.0.1SERVER_NAME localhostSERVER_PORT 80SERVER_PROTOCOL HTTP/1.1SERVER_SOFTWARE lighttpd/1.4.49 (win32)SYSTEMROOT C:\WindowsWINDIR C:\WindowsPATH D:\UccenOS\UccenOS\Servers\lighttpd ---------------------------------------------------------------------- Leledumbo · 2023-04-23 00:19 Quote from: BSaidus on April 22, 2023, 10:42:13 amDo not you think that there is something messing . No, but also do note that not all headers are parsed and stored to its own property, as not all are standard. Those non-standard headers can be queried with THTTPHeader.CustomHeaders, which you can also set as response headers, so you wish. Web servers like Lighttpd also tend to add their own headers, for identification inside the user program if necessary, which are some that you see. ---------------------------------------------------------------------- BSaidus · 2023-04-24 07:32 Hello @Leledumbo A how about Code: Pascal [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i AResponse.SendRedirect('http://localhost/index.cgi'); while using POST, using Code: Pascal [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i GET [/color]it works but not with POST. I bypassed this problem using this code. Code: Pascal [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i class procedure tUccenPf.fpSendRedirect(AResponse: TResponse; AURL: String);begin AResponse.SetCustomHeader('METHODE', 'GET'); AResponse.SendHeaders(); AResponse.SendRedirect( AURL );end; { ------ ---------------------------------------------------------------------- ---------- }{ // Suppose that method is POST }{ ------------------------------------- ------------------------------------------------- }class procedure tUccenPf.fpProcessUccenPf(ARequest: TRequest; AResponse: TResponse);var lName: String; lURLToRedirect: String;begin lURLToRedirect := fpRequest2URL(ARequest); // Get the URL (http://localhost/index.cgi) lName := ARequest.ContentFields.Values['bt_ucccen1'] ; if System.Pos('bt_save0', lName) > 0 then begin tUcExec.fpLog('[bt_save0] saving general network configuration'); fpProcessDbParameters(ARequest); Self.fpSendRedirect(AResponse, lURLToRedirect); Exit; end;end; I simply modify the POST =>(to) GET in ARespnse Header. ---------------------------------------------------------------------- Leledumbo · 2023-04-24 08:57 Quote from: BSaidus on April 24, 2023, 09:32:06 amHello @Leledumbo A how about Code: Pascal [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i AResponse.SendRedirect('http://localhost/index.cgi'); while using POST, using Code: Pascal [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i GET [/color]it works but not with POST. SendRedirect sends 302/307, both of which cannot redirect a POST request, for a logical reason. 303 MIGHT be able to, but I haven't verified. My classic solution is to send a HTML containing JavaScript in its head that sets window.location, giving similar effect to instant redirection. ---------------------------------------------------------------------- BSaidus · 2023-04-24 09:05 Quote from: Leledumbo on April 24, 2023, 10:57:16 amMy classic solution is to send a HTML containing JavaScript in its head that sets window.location, giving similar effect to instant redirection. Thank you, I'll try it .