我有一个Inno安装安装程序,需要在安装期间进行API调用。这会将一些数据发布到远程API中。
POST调用在代码部分使用Pascal和WinHttpRequest对象执行。API是ASP.Net WebAPI 2 (C#)。
我完全控制了进程的所有部分,即Inno设置脚本、它的代码部分和WebAPI。
问题
我可以同步进行POST调用,不会出现任何问题,但是如果我在WinHttpRequest.Open()方法上将异步标志设置为WinHttpRequest.Open(),则.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;
我使用VisualStudio调试器中的一个断点进行了检查,端点永远不会被调用。
在Google上搜索的时候,我只找到了异步获得响应的各种尝试,但是我找不到解决这个问题的方法。我不需要响应,这是一种火灾和遗忘的API调用.
浓缩问题
为什么API没有接收到调用,我如何解决这个问题?
谢谢。
发布于 2017-06-14 11:17:54
为了完成异步请求,WinHttpRequest实例必须保持“活动”。
为此,你至少要确保:
WinHttpReq一直保存到请求完成为止。也就是说,在特定情况下,您不能在请求完成之前离开PostData。或者您需要使WinHttpReq成为一个全局变量(而不是PostData过程的本地变量)。
变量;过程CreateOleObject('WinHttp.WinHttpRequest.5.1');PostData(姿势: String);var ReqContent: String;开始尝试WinHttpReq := ReqContent := 'item=value';WinHttpReq.Open('POST',postUrl,true);WinHttpReq.SetRequestHeader(‘Content’,‘application/x form-urlencoded’);WinHttpReq.Send(ReqContent);除了end,end;https://stackoverflow.com/questions/44542756
复制相似问题