已收录

wpsjs加载项进行跨域http请求的尝试

wils
wils Lv.4 核心创作者

Lv.4 核心创作者

在wpsjs加载项里,进行跨域http请求有点麻烦

同时,js宏里的fetch也不太完整,比如不能发二进制等

所以,今天尝试换个写法,多亏了有灵犀


告诉灵犀:

  • 用c做个dll,有一个send方法,可以外部通过ffi调用,接受一个参数是cstr的url,返回一个随机的正的非零int32记作n,会创建一个命名管道,命名管道的名字是wps开头,后面跟着数字n,创建管道后直接返回数字,不要阻塞,线程里会等待连接3秒,如果没有连接就退出,如果连接了,就通过winhttp发送get请求到url,返回的内容写入命名管道

  • 另外又做了几轮对话,创建了build.ps1编译脚本,我在vs2019的开发者终端里执行脚本,顺畅的编译成功

最后得到一个dll,不用像com加载项那样注册,也不用像xll那样加载

在js宏或者wpsjs加载项里,都可以直接调用,稍作修改,在linux也一样可用

const n = wps.ExecuteExcel4Macro(`CALL("...\\send.dll", "send", "JC", "https://httpbin.org/get")`);
wps.FileSystem.ReadFile(`\\\\.\\pipe\\wps${n}`);

如图,是et表格的wpsjs加载项里

之所以这样设计接口,就是为了方便ExecuteExcel4Macro调用

返回值类型就是J,参数类型就是C

由于不阻塞,所以直接执行下一句,正好FileSystem可以直接读取命名管道,也就得到了请求的返回值

另外,在js宏里用ffi调用更方便


总的来说,没提示,火绒也不会通知,用起来还算舒服

更重要的是,有了灵犀,原以为永远不会碰的c语言,现在也可以顺畅的使用

至于发送请求的详细设计,收到内容的预处理等等,都可以让灵犀进行完善,简直太爽了

海南省
浏览 229
收藏
2
分享
2 +1
+1
全部评论