当前位置: 首页 > 资讯 > 正文

[Python+Html]基于http.server库与局域网实现手机与电脑通信的可行方案

来源:哔哩哔哩    时间:2023-06-19 10:25:52

本专栏由个人独立创作,仅在哔哩哔哩平台发布


(资料图)

编程仅为个人兴趣,尚未系统性学习编程,水平不行或有逻辑性错误请见谅

效果图:

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

X 关闭

推荐内容

最近更新

Copyright ©  2015-2022 东方珠宝网版权所有  备案号:沪ICP备2020036824号-8   联系邮箱:562 66 29@qq.com