【问题标题】:HTTP POST request in Inno Setup ScriptInno 设置脚本中的 HTTP POST 请求
【发布时间】:2011-02-02 07:43:11
【问题描述】:

我想通过 POST 提交一些在 Inno 安装过程中从用户那里收集到的信息到我们的服务器。

明显的解决方案是包含一个 .exe 文件,安装程序会将其提取到临时位置并使用参数启动。但是,我想知道 - 有没有更简单/更好的方法?

【问题讨论】:

  • 在我们的项目方法中使用自定义 .exe 效果很好。

标签: http inno-setup http-post


【解决方案1】:

根据使用WinHTTP library 的jsobo 建议,我提供了这个非常 简单的代码来解决问题。假设您想在实际安装开始之前发送序列号进行验证。在Code 部分,输入:

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;

https://docs.microsoft.com/en-us/windows/win32/winhttp/winhttprequest 列出了WinHttpRequest 对象的所有方法和属性。

此外,为了避免运行时错误(如果主机无法访问,可能会发生),最好用try/except 代码包围代码。

【讨论】:

    【解决方案2】:

    您总是可以让您的安装程序使用curl 制作http帖子...

    您可以直接在 innosetup 中编写一个 pascal 脚本来使用 winhttp library 进行调用

    或者您也可以编写一个 vbscript 并使用 cscript 引擎执行它,以通过 winhttp 库执行相同的 http 调用。

    这应该为您指出至少 3 个不同的选项来满足您的需求。

    我认为将 exe 放在那里最不容易出错,但使用带有 pascal 脚本(由 innosetup 使用)的 winhttp 库将是最简单的。

    【讨论】:

      【解决方案3】:

      我还没有尝试过,但是 ISXKB 有一个使用 HTTP POST 的卸载调查条目: http://www.vincenzo.net/isxkb/index.php?title=Uninstall_Survey

      【讨论】:

        猜你喜欢
        • 2017-03-10
        • 2017-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-10
        • 2016-10-15
        相关资源
        最近更新 更多