Inno Setup 中不等待响应的异步 HTTP POST 请求
Asynchronous HTTP POST request without waiting for response in Inno Setup
我有一个 Inno Setup 安装程序,需要在安装过程中进行 API 调用。这会将一些数据发布到远程 API.
POST 调用是在 [Code] 部分使用 Pascal 和 WinHttpRequest
对象执行的。
API 是 ASP.Net WebAPI 2 (C#)。
我可以完全控制流程的所有部分,即 Inno Setup 脚本、它的代码部分和 WebAPI。
问题
我可以毫无问题地同步调用 POST,但是如果我在 WinHttpRequest.Open()
方法上将异步标志设置为 true
,则 .Send()
方法不会似乎完全执行。
procedure PostData(postural: String);
var
WinHttpReq: Variant;
ReqContent: String;
begin
try
WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');
ReqContent := 'item=value';
WinHttpReq.Open('POST', postUrl, true);
WinHttpReq.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
WinHttpReq.Send(ReqContent);
except
end;
end;
</pre>
我检查了 VisualStudio 调试器中的断点,但从未调用端点。
在此处和 Google 上进行搜索时,我只发现了各种尝试异步获取响应的方法,但找不到解决此问题的方法。我不需要响应,这是一种即发即弃的 API 调用。
简明问题
为什么 API 没有接到电话,我该如何解决?
谢谢。
要完成异步请求,WinHttpRequest
的实例必须保持“活动”状态。
为此,您至少必须确保:
变量 WinHttpReq
在请求完成之前一直存在。 IE。在您的特定情况下,您不能在请求完成之前离开 PostData
。或者您需要使 WinHttpReq
成为全局变量(不是 PostData
过程的本地变量)。
var
WinHttpReq: Variant;
procedure PostData(postural: String);
var
ReqContent: String;
begin
try
WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');
ReqContent := 'item=value';
WinHttpReq.Open('POST', postUrl, true);
WinHttpReq.SetRequestHeader(
'Content-Type', 'application/x-www-form-urlencoded');
WinHttpReq.Send(ReqContent);
except
end;
end;
进程(安装程序)本身会运行,直到请求完成。
我有一个 Inno Setup 安装程序,需要在安装过程中进行 API 调用。这会将一些数据发布到远程 API.
POST 调用是在 [Code] 部分使用 Pascal 和 WinHttpRequest
对象执行的。
API 是 ASP.Net WebAPI 2 (C#)。
我可以完全控制流程的所有部分,即 Inno Setup 脚本、它的代码部分和 WebAPI。
问题
我可以毫无问题地同步调用 POST,但是如果我在 WinHttpRequest.Open()
方法上将异步标志设置为 true
,则 .Send()
方法不会似乎完全执行。
procedure PostData(postural: String); var WinHttpReq: Variant; ReqContent: String; begin try WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1'); ReqContent := 'item=value'; WinHttpReq.Open('POST', postUrl, true); WinHttpReq.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); WinHttpReq.Send(ReqContent); except end; end; </pre>
我检查了 VisualStudio 调试器中的断点,但从未调用端点。
在此处和 Google 上进行搜索时,我只发现了各种尝试异步获取响应的方法,但找不到解决此问题的方法。我不需要响应,这是一种即发即弃的 API 调用。
简明问题
为什么 API 没有接到电话,我该如何解决?
谢谢。
要完成异步请求,WinHttpRequest
的实例必须保持“活动”状态。
为此,您至少必须确保:
变量
WinHttpReq
在请求完成之前一直存在。 IE。在您的特定情况下,您不能在请求完成之前离开PostData
。或者您需要使WinHttpReq
成为全局变量(不是PostData
过程的本地变量)。var WinHttpReq: Variant; procedure PostData(postural: String); var ReqContent: String; begin try WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1'); ReqContent := 'item=value'; WinHttpReq.Open('POST', postUrl, true); WinHttpReq.SetRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded'); WinHttpReq.Send(ReqContent); except end; end;
进程(安装程序)本身会运行,直到请求完成。