我要做的就是从NSIS安装程序的自定义页面中向Web服务发送带有Querystring或HTTP POST的HTTP GET。
问题是大多数插件可以上传/下载文件,但不是简单地调用服务并返回响应。推荐使用的插件是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
但我无法弄清楚如何将从URL返回的数据传回NSIS。上面的代码只返回$ connectResult中的一个整数,它可能代表CURL的返回码。如何将从URL返回的实际HTML返回到NSIS堆栈或变量?
或者,任何人都可以推荐更好的方法来实现这一目标吗?调用Web服务似乎是如此基本,以至于成千上万的人应该已经知道了这一点。
答案 0 :(得分: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"
就是这样。
答案 1 :(得分:1)
NSISdl::download_quiet "http://127.0.0.1/vid.php?vid=1" "$TEMP/checkvid.txt" FileOpen $0 $TEMP\checkvid.txt r FileRead $0 $1 DetailPrint $1 FileClose $0 ${If} $1 == "vidNTYE1203" MessageBox MB_OK "video found" Delete "$TEMP\checkvid.txt" ${Else} MessageBox MB_OK "bye bye" Delete "$TEMP\checkvid.txt" Quit ${EndIf}
这是我的制作工作片段。对我来说工作很好。请注意删除'命令和' \'斜线。
答案 2 :(得分:0)
我建议使用INetC而不是NsisUrlLib,较旧的firefox安装程序使用它非常成功。