Inno安装程序中无需等待响应的异步HTTP POST请求
我有一个Inno安装程序,需要在安装过程中调用API。这会将一些数据发布到远程API POST调用在[Code]部分使用Pascal和Inno安装程序中无需等待响应的异步HTTP POST请求,http,post,inno-setup,pascal,winhttprequest,Http,Post,Inno Setup,Pascal,Winhttprequest,我有一个Inno安装程序,需要在安装过程中调用API。这会将一些数据发布到远程API POST调用在[Code]部分使用Pascal和WinHttpRequest对象执行。 API是ASP.NETWebAPI 2(C#) 我完全控制整个过程的所有部分,即Inno设置脚本、代码部分和WebAPI 问题 我可以同步进行POST调用而不会出现任何问题,但是如果我在WinHttpRequest.Open()方法上将async标志设置为true,则.Send()方法似乎根本不会执行 程序后置数据(姿势:
WinHttpRequest
对象执行。
API是ASP.NETWebAPI 2(C#)
我完全控制整个过程的所有部分,即Inno设置脚本、代码部分和WebAPI
问题
我可以同步进行POST调用而不会出现任何问题,但是如果我在WinHttpRequest.Open()
方法上将async标志设置为true
,则.Send()
方法似乎根本不会执行
程序后置数据(姿势:字符串);
变量
WinHttpReq:变体;
内容:字符串;
开始
尝试
WinHttpRequest:=CreateOleObject('WinHttp.WinHttpRequest.5.1');
要求内容:='项目=价值';
WinHttpReq.Open('POST',postrl,true);
WinHttpReq.SetRequestHeader('Content-Type','application/x-www-form-urlencoded');
WinHttpReq.Send(请求内容);
除了
结束;
结束;
我使用VisualStudio调试器中的断点进行了检查,但从未调用该端点
在这里和谷歌上搜索时,我只找到了各种异步获取响应的尝试,但我找不到解决这个问题的方法。我不需要响应,这是一个fire-and-forget类型的API调用
浓缩问题 为什么API没有收到调用,我如何修复
谢谢。要完成异步请求,WinHttpRequest的实例必须保持“活动状态” 为此,您必须确保至少:
- 变量
将一直存在,直到请求完成。也就是说,在您的特定情况下,您不能在请求完成之前离开WinHttpReq
。或者您需要使PostData
成为全局变量(而不是WinHttpReq
过程的局部变量)PostData
var WinHttpReq:变体; 程序后置数据(姿势:字符串); 变量 内容:字符串; 开始 尝试 WinHttpRequest:=CreateOleObject('WinHttp.WinHttpRequest.5.1'); 要求内容:='项目=价值'; WinHttpReq.Open('POST',postrl,true); WinHttpReq.SetRequestHeader( “内容类型”、“应用程序/x-www-form-urlencoded”); WinHttpReq.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;