George George - 1 year ago 172
HTTP Question

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?

Answer Source

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);
  WinHttpReq: Variant;
  if CurStep = ssInstall then
    if AutoCheckRadioButton.Checked = True then
      WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');
      WinHttpReq.Open('POST', '<your_web_server>', false);
      WinHttpReq.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      // WinHttpReq.ResponseText will hold the server response

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
  MsgBox('ERROR', mbError, MB_OK);
  MsgBox('SUCCESS', mbInformation, MB_OK);
end; 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.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download