JSA通过winhttp发送二进制请求
Lv.2潜力创作者
前几天有论坛上的朋友问,JSA里的fetch不能发送二进制请求,怎么办
确实,JSA里的fetch功能不全,不能收发二进制,很多方法不能用
今天尝试通过ffi调用winhttp来发送二进制请求
| 🔔 | function tt() { const {WinHttpOpen, WinHttpConnect, WinHttpOpenRequest, WinHttpSendRequest, WinHttpReceiveResponse, WinHttpCloseHandle} = ffi.LoadLibrary('winhttp', { WinHttpOpen: { returnType: "pointer", parameters: ["u16string", "uint32", "pointer", "pointer", "uint32"] }, WinHttpConnect: { returnType: "pointer", parameters: ["pointer", "u16string", "uint32", "uint32"] }, WinHttpOpenRequest: { returnType: "pointer", parameters: ["pointer", "u16string", "u16string", "pointer", "pointer", "pointer", "uint32"] }, WinHttpSendRequest: { returnType: "bool", parameters: ["pointer", "pointer", "uint32", "pointer", "uint32", "uint32", "pointer"] }, WinHttpReceiveResponse: { returnType: "bool", parameters: ["pointer", "pointer"] }, WinHttpCloseHandle: { returnType: "bool", parameters: ["pointer"] } }); const data = new Uint8Array([0xDE, 0xAD, 0xBE, 0xEF]).buffer; let hSession = null, hConnect = null, hRequest = null; try { hSession = WinHttpOpen("WPS", 0, null, null, 0); hConnect = WinHttpConnect(hSession, "httpbin.org", 443, 0); hRequest = WinHttpOpenRequest(hConnect, "POST", "/post", null, null, null, 0x00800000); const sendOk = WinHttpSendRequest( hRequest, null, 0, data, data.byteLength, data.byteLength, null ); const recvOk = WinHttpReceiveResponse(hRequest, null); console.log(recvOk); } finally { [hRequest, hConnect, hSession].forEach(handle => handle && WinHttpCloseHandle(handle)); } } |
基本都是用ai写的,能用就行🤣
除了写起来麻烦,功能上各种需求都能实现,比较满意
但是,Linux里想用类似的方法使用libcurl,一直没有成功,希望更多朋友来尝试,希望大佬指点,多谢
