HTTP POST-запрос в Inno Setup Script - PullRequest
       22

HTTP POST-запрос в Inno Setup Script

13 голосов
/ 02 февраля 2011

Я хотел бы передать некоторую информацию, собранную от пользователя во время установки Inno setup, на наш сервер через POST.

Очевидным решением будет включение файла .exe, который программа установки извлечет во временную папку и запустит с параметрами. Однако мне интересно - есть ли более простой / лучший способ?

Ответы [ 3 ]

19 голосов
/ 17 июля 2011

Основываясь на рекомендациях jsobo по использованию библиотеки WinHttp, я пришел с этим очень простым кодом, который добился цели. Скажем, вы хотите отправить серийный номер для проверки непосредственно перед началом фактической установки. В разделе кода введите:

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;

Метод Open принимает в качестве аргументов метод HTTP, URL и необходимость выполнения асинхронного запроса, и кажется, что нам нужно добавить SetRequestHeader, чтобы установить для заголовка Content-Type значение application/x-www-form-urlencoded.

WinHttpReq.Status будет содержать код ответа, поэтому для проверки успешного возврата сервера:

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

http://msdn.microsoft.com/en-us/library/aa384106.aspx перечисляет все методы и свойства объекта WinHttpRequest.

Кроме того, во избежание ошибок во время выполнения (может произойти, если хост недоступен), рекомендуется заключить код в код try/except.

3 голосов
/ 13 февраля 2011

Вы всегда можете сделать так, чтобы ваш установщик использовал curl для создания http-сообщения ...

Вы можете написать паскаль прямо в innosetup для выполнения вызова с использованием winhttpбиблиотека

Или вы можете просто написать vbscript и выполнить его с помощью механизма cscript для выполнения того же http-вызова через библиотеку winhttp.

Это должно указать вам как минимум на 3 различныхварианты сделать то, что вам нужно.

Я думаю, что размещение exe-файла будет менее подвержено ошибкам, но использование библиотеки winhttp со скриптом pascal (используемым innosetup) будет наиболее простым.

2 голосов
/ 02 февраля 2011

Я не пробовал, но ISXKB имеет запись для опроса удаления, которая использует HTTP POST: http://www.vincenzo.net/isxkb/index.php?title=Uninstall_Survey

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...