1

我要做的就是从 NSIS 安装程序的自定义页面中将带有 Querystring 或 HTTP POST 的 HTTP GET 发送到 Web 服务。

问题是大多数插件都可以上传/下载文件,但不能简单地调用服务并返回响应。推荐使用的插件是 NsisUrlLib。我试过这个,虽然它适用于简单的 GET 请求,但如果 URL 中有查询字符串参数,它会失败并引发错误,例如:

NsisUrlLib::UrlOpen /NOUNLOAD "http://tc.hwidev.com?var=value"
Pop $connectResult

NSISdl、INetC 和其他插件与查询字符串一起使用,但只能用于上传/下载文件。

我尝试使用 ExecDos 插件从命令行调用 cURL.exe,如下所示:

ExecDos::exec /TOSTACK "curl" "http://tc.hwidev.com"
Pop $connectResult

但我不知道如何获取从传递回 NSIS 的 URL 返回的数据。上面的代码只是将一个整数返回到 $connectResult 中,它可能代表 CURL 的返回代码。如何获取从 URL 返回的实际 HTML 到 NSIS 堆栈或变量中?

或者,任何人都可以推荐一种更好的方法来实现这一点吗?调用 Web 服务似乎很简单,以至于成千上万的人应该已经明白了这一点。

4

3 回答 3

1

NSISdl、Inetc 等不仅仅用于上传/下载文件。我认为你误解了这一点。您可以使用它们来调用 REST api,但您需要将答案保存到本地文件,然后对其进行解析。

示例:调用响应 XML 的 REST api:

# Call to REST API
NSISdl::download_quiet "http://remotesite?restparams" "$TEMP/result.xml"

# Parse answer
nsisXML::create
nsisXML::load "$TEMP/result.xml"
nsisXML::select "/response/status"

# Clean
delete "$TEMP/result.xml"

而已。

于 2013-03-25T11:05:51.340 回答
1
NSISdl::download_quiet "http://127.0.0.1/vid.php?vid=1" "$TEMP/checkvid.txt"   

文件打开 $0 $TEMP\checkvid.txt r

文件读取 $0 $1

详细打印 $1

文件关闭 $0

${如果} $1 == "vidNTYE1203"

MessageBox MB_OK“找到视频”

删除“$TEMP\checkvid.txt”         

${其他}

MessageBox MB_OK “再见”

删除“$TEMP\checkvid.txt”

退出

${结束如果}

这是我的生产工作片段。对我来说工作得很好。注意“删除”命令和“\”斜杠。

于 2017-01-25T15:54:45.803 回答
0

我会推荐INetC而不是 NsisUrlLib,较旧的 firefox 安装程序使用它取得了很大的成功。

于 2013-03-22T17:58:53.550 回答