[Python+Html]基于http.server库与局域网实现手机与电脑通信的可行方案
本专栏由个人独立创作,仅在哔哩哔哩平台发布
(资料图)
编程仅为个人兴趣,尚未系统性学习编程,水平不行或有逻辑性错误请见谅
效果图:
0.所需库
http.server
os
keyboard
threading
1.http.server库
http.server为python自带库,正如官方文档所言:“这个模块定义了用于实现 HTTP 服务器的类”,我们可通过在cmd中执行:
python -m http.server
建立简单服务器,效果如下:
之后注意自己服务端ip地址(ipconfig),在浏览器中输入服务器ip:8000(eg:192.168.0.112:8000)即可访问建立服务器的文件夹根目录(所以是可以指定根目录的,只要在想要的文件夹中输入cmd就行):
此外,官网也给出了在.py文件中的搭建方式,效果同上(py文件在哪里根目录在哪里):
那么有了服务器,我们怎么编写自己的网页呢?
2.SimpleHTTPRequestHandler
不妨我们来看看官方文档中的描述:
可以看到,在官方文档中,指出了http.server有一类比较特殊,它是搭建服务器网页的核心要素,具体与网页相关函数方法如下:
我们可以把do_GET函数近似理解为前端,即显示在用户页面上的内容,而do_POST函数理解为后端,即服务器响应用户操作事件,两者间通过form表单的post功能相联系。
因此我们或许可以继承并修改SimpleHTTPRequestHandler类来建立网站。
所以,具体如何操作呢?可惜的是,翻阅官方文档并未给出具体答案。。。
3.网页建立
在网络上查阅后,我找到了一篇类似文章:
其中具体编写了GET端与POST端代码:
GET端
POST端
仔细研究后发现,参数"datas"是链接get与post的重要桥梁,其一般形式为:
b'xxxxx(GET 函数参数)'
求助:有没有大佬知道前面为什么有"b"
那么有了参数datas建立的桥梁,我们似乎就可以通过判断datas具体数值,从而执行对应命令,我的方案如下:
3.1submit按钮
经过多次尝试,我发现在html按钮中只有submit能正常实现功能(尝试button+JavaScript未果,水平不行请见谅),且仅添加submit有严格要求,格式如下:
<input type="submit" name="xxxx" value="xxx"/>
需要保证name值与value值同时有定义(无需保持一致)方可传参。对应datas为:
b'xxxx(name值)=xxx(value值)'
有没有更好的方法?
具体代码如下图所示:
3.2客户端与电脑端的链接
正如上文所示,个人方案比较粗暴:直接判断datas传入参数从而执行对应命令
目前所能执行的有:①通过os模块打开指定程序(cmd)
②通过keyboard模块使用快捷键:Ctrl+D,ALT+F4等(Clean,Crash)
需要注意的是,最好使用threading库进行多线程,以防主进程卡死的可能性。
将要添加的功能:①控制电脑音乐的播放,下一曲等
②添加旋钮控制电脑音量
③将音乐歌词显示在手机上
4.存在问题
在编入html代码后便无法再次实现源代码中“Directory listing for ”目录浏览,以实现类似微信文件传输助手功能。
当每监听并完成一项task后,其页面通常跳转至“./post_page”,造成的结果是无法持续监听。个人的解决方法是在post_page设置页面每隔0.5s请求返回原页面。代码如下:
3. 暂未找到除 submit按钮之外其他实现do_GET()与do_POST()函数链接方式(参考文献较 少,还未系统性学习python,html,水平菜请见谅)
参考文献:
https://blog.csdn.net/qq_44159028/article/details/118099689
https://docs.python.org/zh-cn/3/library/http.server.html
https://zhuanlan.zhihu.com/p/92482007
标签:
相关文章
[Python+Html]基于http.server库与局域网实现手机与电脑通信的可行方案
本专栏由个人独立创作,仅在哔哩哔哩平台发布编程仅为个人兴趣,尚未系
观点:HelloKitty将50岁,卡通角色凭什么年收十亿美金?没嘴巴是必杀技
真想不到,HelloKitty马上50岁了!这只没有嘴巴,没有表情带着蝴蝶结的