【按键精灵】实战案例教你POST请求字符串相似度比较

案例摘要:小白很懒,不想自己写代码,却想本地输入两个字符串,通过POST请求获取两者间的文本相似度。以下将通过清晰的逻辑和简单易懂的方式告诉你如何轻松建立自己的POST函数。

按键精灵版本:2014.06

目录

2024-08版

2022-11版 (不再适用,仅供查看)


2024-08版

假设有如图1所示的服务器,地址为localhost,监听端口3000,现在拥有了一个被监听的路由函数,计算传入参数的两个字符串的相似度,指向地址http://localhost:3000/utils/convertsimilar

图1  服务器示例
// 监听服务器对 /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所示

图2  2024-08版整体运行效果图

2022-11版

* 2022年11月补充:该方法只适用于直接发送到服务器的请求,教程中的网站已不适用。

【1】打开在线的工具网站,并打开开发者工具(F12),进入到网络界面,如图3示。

图3  在线文本相似度检测工具

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

图4 POST的表单数据
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得到的结果相一致。

图5 网络请求图1的结果
//比较 123456789 和123456987 的文本相似度
res = sendHttpRequest("123456789", "123456987")
TracePrint res
图6 运行及输出结果

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

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值