Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

HTTP POST request in Inno Setup Script

I would like to submit some information collected from user during Inno setup installation to our server via POST.

Obvious solution would be to include an .exe file that the setup would extract into temporary location and launch with parameters. However, I'm wondering - is there is any easier/better way?

like image 423
George Avatar asked Feb 02 '11 07:02

George


3 Answers

Based on jsobo advice of using WinHTTP library, I came with this very simple code that does the trick. Say, you want to send serial number for verification just before the actual installation starts. In the Code section, put:

procedure CurStepChanged(CurStep: TSetupStep);
var
  WinHttpReq: Variant;
begin
  if CurStep = ssInstall then
  begin
    if AutoCheckRadioButton.Checked = True then
    begin
      WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');
      WinHttpReq.Open('POST', '<your_web_server>', false);
      WinHttpReq.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      WinHttpReq.Send('<your_data>');
      { WinHttpReq.ResponseText will hold the server response }
    end;
  end;
end;

The Open method takes as arguments the HTTP method, the URL and whether to do async request and it seems like we need to add SetRequestHeader in order to set the Content-Type header to application/x-www-form-urlencoded.

WinHttpReq.Status will hold the response code, so to check if the server returned successfully:

if WinHttpReq.Status <> 200 then
begin
  MsgBox('ERROR', mbError, MB_OK);
end
else
begin
  MsgBox('SUCCESS', mbInformation, MB_OK);
end;

https://learn.microsoft.com/en-us/windows/win32/winhttp/winhttprequest lists all methods and properties of the WinHttpRequest object.

Also, to avoid run-time errors (can happen if the host is unreachable) it is a good idea to surround the code with try/except code.

like image 60
Martin Dimitrov Avatar answered Nov 05 '22 06:11

Martin Dimitrov


You could always have your installer use curl to make the http post...

You could write a pascal script right in innosetup to do the call utilizing the winhttp library

Or you could just write a vbscript and execute that with the cscript engine to do the same http call via the winhttp library.

That should point you to at least 3 different options to do what you need.

I think putting the exe in there would be the least error prone but utilizing the winhttp library with the pascal script (used by innosetup) would be the most simple.

like image 4
John Sobolewski Avatar answered Nov 05 '22 06:11

John Sobolewski


I haven't tried it but the ISXKB has an entry for an uninstall survey that uses an HTTP POST: http://www.vincenzo.net/isxkb/index.php?title=Uninstall_Survey

like image 3
mirtheil Avatar answered Nov 05 '22 06:11

mirtheil