Web services 正在尝试与NSIS的REST服务通信

Web services 正在尝试与NSIS的REST服务通信,web-services,rest,curl,nsis,Web Services,Rest,Curl,Nsis,我所要做的只是从NSIS安装程序中的自定义页面向web服务发送一个带有Querystring的HTTP GET或HTTP POST 问题是大多数插件可以上传/下载文件,但不能简单地调用服务并返回响应。推荐使用的插件是NsisUrlLib。我尝试了这个方法,虽然它可以处理简单的GET请求,但如果URL中有querystring参数,它会失败并抛出错误,例如: NsisUrlLib::UrlOpen /NOUNLOAD "http://tc.hwidev.com?var=value" Pop $co

我所要做的只是从NSIS安装程序中的自定义页面向web服务发送一个带有Querystring的HTTP GET或HTTP POST

问题是大多数插件可以上传/下载文件,但不能简单地调用服务并返回响应。推荐使用的插件是NsisUrlLib。我尝试了这个方法,虽然它可以处理简单的GET请求,但如果URL中有querystring参数,它会失败并抛出错误,例如:

NsisUrlLib::UrlOpen /NOUNLOAD "http://tc.hwidev.com?var=value"
Pop $connectResult
NSISdl、INetC和其他插件使用querystring,但只能用于上传/下载文件

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

ExecDos::exec /TOSTACK "curl" "http://tc.hwidev.com"
Pop $connectResult
但我不知道如何将URL返回的数据传递回NSIS。上面的代码只是将一个整数返回到$connectResult中,它可能表示CURL的返回代码。如何将URL返回的实际HTML放入NSIS堆栈或变量中


或者,有人能推荐一种更好的方法来实现这一点吗?调用Web服务似乎非常基本,成千上万的人应该已经知道了这一点。

我建议使用NsisUrlLib,较旧的firefox安装程序使用它非常成功。

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

示例:调用响应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"
就这样

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} NSISdl::下载“安静”http://127.0.0.1/vid.php?vid=1“$TEMP/checkvid.txt” FileOpen$0$TEMP\checkvid.txt r 文件读取$0$1 详情打印$1 文件关闭$0 ${If}$1==“vidNTYE1203” MessageBox MB_OK“找到视频” 删除“$TEMP\checkvid.txt” ${Else} MessageBox MB_OK“再见” 删除“$TEMP\checkvid.txt” 退出 ${EndIf}
这是我在生产中的工作片段。对我来说效果很好。请注意“Delete”命令和“\”斜杠

当然,我建议您创建宏以保持代码干净。