wpsjs加载项进行跨域http请求的尝试
wils
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语言,现在也可以顺畅的使用
至于发送请求的详细设计,收到内容的预处理等等,都可以让灵犀进行完善,简直太爽了