met*_*lar 5 post pascal inno-setup http winhttprequest
我有一个 Inno Setup 安装程序,需要在安装过程中进行 API 调用。这会将一些数据发布到远程 API。
POST 调用在 [Code] 部分使用 Pascal 和WinHttpRequest对象执行。API 是 ASP.Net WebAPI 2 (C#)。
我可以完全控制流程的所有部分,即 Inno Setup 脚本、代码部分和 WebAPI。
我可以在没有任何问题的情况下同步进行 POST 调用,但是如果我true在WinHttpRequest.Open()方法上设置 async 标志,则该.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;
Run Code Online (Sandbox Code Playgroud)
我在 VisualStudio 调试器中检查了一个断点,并且永远不会调用端点。
在此处和 Google 上搜索时,我只发现了各种异步获取响应的尝试,但我找不到针对此问题的解决方案。我不需要响应,这是一种即发即忘的 API 调用。
为什么 API 没有收到调用,我该如何解决这个问题?
谢谢。
为了完成异步请求, 的实例WinHttpRequest必须保持“活动”状态。
为此,您必须至少确保:
该变量WinHttpReq将一直存在,直到请求完成。即,在您的特定情况下,您不能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;
Run Code Online (Sandbox Code Playgroud)
该进程(安装程序)本身会运行,直到请求完成。
| 归档时间: |
|
| 查看次数: |
661 次 |
| 最近记录: |