当前位置: 首页 > 后端技术 > Node.js

《实现一个“人工智能”QQ机器人!》续

时间:2023-04-03 16:40:19 Node.js

参考实现一个“人工智能”QQ机器人!-上一篇QQ群-萌萌老妹机器人后援群-基于物联网的多功能工具机器人QQ群-Javascript进阶爬虫-Javascript开发者讨论群,欢迎加入!在nodejs中使用socket.io-client,使用Fiddler抓包-只有了解了抓包的底层,才能得到本文的深入内容。API编写的完整工程,对于头疼垃圾太多的QQ群管理员来说非常实用。调试WEB_API并添加验证。在上一篇文章中介绍过可以使用Chrome插件TalendAPITester查看和测试IOTQQ的WebAPI,但是由于后面通过nginx反向代理增加了BasicAuth来提高接口安全性,所以还需要在插件界面添加鉴权,否则无法正常测试。具体方法:在API主页面的HEADERS面板下,点击Addauthorization,在弹出的对话框中填写用户名和密码。上一篇文章提到,IOTQQ的websocket是基于socket.io实现的,不能直接用ws://...访问,所以网上有些websocket测试工具不能用,只能自己写连接的socket.io客户端程序,经过测试,找到了一个socket.io的在线客户端,地址在这里:socketio-client-tool使用这个客户端连接IOTQQ接口需要三步:填写接口地址,点击Connect,在下方Eventname输入框依次输入OnGroupMsgs、OnFriendMsgs、OnEvents,点击Listen切换到Emitting面板,在Eventname输入框输入GetWebConn,在Data:plaintext输入登录QQ号下面的文本框,一定要加上双引号,然后点击Emit。这时候切换回监听面板,就可以监听服务器推送了。您可以将其与上一节中的APITester工具一起使用来测试接口。来回推动它是一种乐趣!优化nginx验证配置抓包后,我们已经知道socket.io客户端的实际请求地址是http://host:port/socket.io/?EIO=3&....因此,我们可以优化之前的文章nginx配置,设置位置更精确,避免直接匹配根路径。同时,因为websocket请求实际上是从普通的http请求升级而来的,所以可以用同样的方法为websocket开启basicauthentication,这样基本上可以避免别人因为接口地址泄露或者被扫描而无法连接到你.ws接口来监视您的私人信息。此外,还可以在nginx层面开启gzip压缩,减少流量消耗。综上,nginx.conf可以优化如下:...gzipon;gzip_min_length1k;gzip_buffers416k;gzip_comp_level5;gzip_typestext/plaintext/xmltext/csstext/javascriptapplication/javascriptapplication/x-javascriptapplication/jsonapplication/xmlimage/jpegimage/gifimage/pngimage/svg+xml;gzip_varyoff;gzip_disable"MSIE[1-6]\.";...location/socket.io/{if($http_authorization!="基本aW90cXE6MTIzNDU2Nzg="){返回401;}proxy_http_version1.1;proxy_passhttp://localhost:8888;proxy_set_header升级$http_upgrade;proxy_set_header连接“升级”;proxy_set_header主机$host;proxy_set_headerX-Forwarded_For$proxy以上};配置,websocket还需要提供Authorizationheader才能正常连接,需要修改程序如下:constAuthorization='Basic'+Buffer.from(`${user}:${pass}`).toString('base64')constsocket=io(WS_API,{transports:['websocket'],extraHeaders:{Authorization}})必须指出的是,上一节介绍的socket.io在线客户端不支持extraHeaders选项,所以如果ws添加了鉴权,就不能使用这个工具了,建议只在生产环境开启鉴权。