案例摘要:小白很懒,不想自己写代码,却想本地输入两个字符串,通过POST请求获取两者间的文本相似度。以下将通过清晰的逻辑和简单易懂的方式告诉你如何轻松建立自己的POST函数。
按键精灵版本:2014.06
目录
2022-11版 (不再适用,仅供查看)
2024-08版
假设有如图1所示的服务器,地址为localhost,监听端口3000,现在拥有了一个被监听的路由函数,计算传入参数的两个字符串的相似度,指向地址http://localhost:3000/utils/convertsimilar。

// 监听服务器对 /utils/convertsimilar 的请求的处理办法
app.post("/utils/convertsimilar", (req, res) => {
let { a, b } = req.body; // 根据 (http.send a=asd&b=dsa) 来得到
let s = calculateSimilarity(a, b); // 计算相似度
let fm = `字符串[${a}]和[${b}]的相似度为${s}\n`; // 在服务端输出结果
res.send({ code: 200, data: s, message: '验证成功' }); // 响应数据
})
现在我们可以这么封装按键精灵的POST请求函数,为了使按键精灵端使用起来更方便,服务器通过解析 application/x-www-form-urlencoded 的方式来得到参数,这个时候按键精灵发送请求前应设置请求头 Content-Type: application/x-www-form-urlencoded ,具体配置如下
Function sendHttpRequest(text_1, text_2)
Set http = CreateObject("Msxml2.XMLHTTP")
http.Open "POST", "http://localhost:3000/utils/convertsimilar", False
http.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
// 发送请求
http.Send "a=" & text_1 & "&b=" & text_2
TracePrint http.responsetext // 按键精灵日志窗口输出返回结果
//利用js命令获取返回结果
Set js = CreateObject("scriptcontrol")
js.language = "jscript"
js.addcode "var resp = {};"
js.addcode "resp = " & http.responsetext
// 该封装函数的返回结果
sendHttpRequest = js.eval("resp.data")
End Function
封装好函数后我们只需要调用函数,就可以得到两个字符串的相似度了!
a = "尽管1没有具体的数字证3明零跑到底抢走了5多少原本属于理想7的订单"
b = "尽管没有具体2的数字证明零跑到4底抢走了多少原本6属于理想的订单"
TracePrint sendHttpRequest(a, b)
整体运行效果如图2所示

2022-11版
* 2022年11月补充:该方法只适用于直接发送到服务器的请求,教程中的网站已不适用。
【1】打开在线的工具网站,并打开开发者工具(F12),进入到网络界面,如图3示。

【2】在图1左边的两个文本框中输入需要比较的字符串,点击计算相似度按钮后,得到图3右边的网络请求,按照其内容,在按键精灵输入(按照图3右方的标头,图4的数据,可以无脑复制)以下代码,可以得到一个POST请求的函数,其中POST的数据如图4所示。

Function sendHttpRequest(text_1, text_2)
Dim 方式, 地址, 参量
方式 = "POST"
//图1的请求URL
地址 = "http://life.chacuo.net/convertsimilar"
//图2的表单数据
参量 = "data=" & text_1 & "^^^" & text_2 & "&type=similar&arg=&beforesend=undefined"
TracePrint 参量
Set http = CreateObject("Msxml2.XMLHTTP")
http.Open 方式, 地址, False
//以下 http.类 是图1请求标头复制下来的
http.setRequestHeader "Accept", "*/*"
http.setRequestHeader "Accept-Encoding", "gzip, deflate"
http.setRequestHeader "Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6"
http.setRequestHeader "Connection", "keep-alive"
// http.setRequestHeader "Content-Length", 71
http.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
http.setRequestHeader "Cookie", "__yjs_duid=1_66d7c688fd53f748f952149a8c64500b1650649143014; Hm_lvt_ef483ae9c0f4f800aefdf407e35a21b3=1650649143; Hm_lpvt_ef483ae9c0f4f800aefdf407e35a21b3=1650649143; BAIDU_SSP_lcr=https://cn.bing.com/; __gads=ID=049583798d770b84-22b9bd5e5cd2004c:T=1650649144:RT=1650649144:S=ALNI_MZaT6DuB7j8I5fftVwpInjuyHR6OA"
http.setRequestHeader "Host", "life.chacuo.net"
http.setRequestHeader "Origin", "http://life.chacuo.net"
http.setRequestHeader "Referer", "http://life.chacuo.net/convertsimilar"
http.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36 Edg/98.0.1108.55"
http.setRequestHeader "X-Requested-With", "XMLHttpRequest"
http.Send 参量 //发送请求
TracePrint http.responsetext //输出返回结果
//利用js命令获取返回结果
Set js = CreateObject("scriptcontrol")
js.language = "jscript"
js.addcode "var data = {}"
js.addcode "data = " & http.responsetext
//按照预览处及需要的结果设定为.data[0],并返回结果
sendHttpRequest = js.eval("data.data[0]")
End Function
【3】测试函数结果。在步骤2中得到了sendHttpRequest(text_1, text_2)后,在按键中比较字符串 "123456789" 和 "123456987" ,检查图5的预览结果是否与图6得到的结果相一致。

//比较 123456789 和123456987 的文本相似度
res = sendHttpRequest("123456789", "123456987")
TracePrint res

【4】拓展。根据图6返回结果,可以设置获取结果中的百分比,来实现给字符串评分引用。