原始构建物联网系列之使用掌控板读取网页信息
掌控板使用了ESP32芯片,这让它具有了联网的能力!通过掌控板读取网页信息进行数据分析,提取相应指令后一样是可以控制家中的电器开关。准备工作:
使用tomcat或其他一些Web服务器,设置其首页内容为:
<script language="javascript">
location.href="/login/userlogin.jsp";
</script>
程序代码段01(参考网址:https://mpython.readthedocs.io/zh/latest/tutorials/basics/network/socket.html,其功能为读取指定网页信息并保存至指定文件中):
import network
import socket
import os
wlan=None
s=None
f = open('httpClientGetHtmV01'+str(time.ticks_us())+'.txt', 'w')#以写入方式建立指定文件
try:
wlan=network.WLAN(network.STA_IF) #掌控板连接路由器起始
wlan.active(True)
wlan.connect("your wifi name","wifi password")
print('connecting to network...')
while(wlan.ifconfig()=='0.0.0.0'):
time.sleep_ms(500)
print('.',end="")
print('WiFi Connection Successful,Network Config:%s' %str(wlan.ifconfig()))#掌控板连接路由器结束
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('192.168.1.112',7513)) #要连接的IP与端口
s.send("GET / HTTP/1.1\r\n")
s.send("Host:192.168.1.112\r\n") #奇怪,这里不加,得到错误网页信息
s.send("\r\n")
while True:
data=s.readline() #读取服务端返回信息
if(len(data)>0):
print(data) #屏幕输出信息
f.write(data) #输出信息写入文件
else:
print("close socket")
s.close()
f.close()
break
except:
if(s):
s.close()
wlan.disconnect()
程序代码段01执行结果得到相关信息截图
若是不执行“s.send("Host:192.168.1.112\r\n")”则是如下结果
若是要访问搜狐首页,则可以将代码中的“192.168.1.112”换成“www.sohu.com”,代码中的“7513”换成“80”。
程序代码段02提高版(此段程序解决分析服务器返回信息,提取Html头部信息存入字典requestContextDict之中,根据反馈信息Content-Length准确得到所需要的网页信息),以下有变化的内容加粗显示。
import network
import socket
import os
wlan=None
s=None
f = open('httpClientGetHtmV01'+str(time.ticks_us())+'.txt', 'w')
print('httpClientGetHtmV01'+str(time.ticks_us())+'.txt')
requestContextDict={} #存储Html头部信息
requestHtmlContentLength=0 #Html网页实际内容长度
isContent=False #是否开始读取网页内容
try:
wlan=network.WLAN(network.STA_IF) #掌控板连接路由器起始
wlan.active(True)
wlan.connect("jsz","jsz123123")
print('connecting to network...')
while(wlan.ifconfig()=='0.0.0.0'):
time.sleep_ms(500)
print('.',end="")
print('WiFi Connection Successful,Network Config:%s' %str(wlan.ifconfig()))#掌控板连接路由器结束
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('192.168.1.112',7513)) #要连接的IP与端口
s.send("GET / HTTP/1.1\r\n")
s.send("Host:192.168.1.112\r\n")
s.send("\r\n")
while True:
data=s.readline() #把接收的数据定义为变量
readlengthper=len(data)
if(readlengthper>0):
if(isContent):
requestHtmlContentLength=requestHtmlContentLength-readlengthper
print(requestHtmlContentLength)
f.write(data)
if(requestHtmlContentLength==0):
print(requestContextDict)
print("htmlcontent end.")
s.close()
f.close()
break
else:
datas=bytes.decode(data)
if(datas=='\r\n'):
isContent=True
elif(datas.find(":")>0):
headkey=datas
headvalue=datas
requestContextDict=headvalue
if(headkey=='Content-Length'):
requestHtmlContentLength=int(headvalue)
elif(datas.find("HTTP/1.1 200 OK")>=0):
print("read ok")
else:
print(data)
print("other error")
else:
print("close socket")
s.close()
f.close()
break
except:
if(s):
s.close()
wlan.disconnect()
使用掌控板读取网页信息涉及Http1.1协议,协议标准可使用如下网址查询。
https://www.ietf.org/rfc/rfc2616.txt
HTTP1.1协议-RFC2616-中文版:https://blog.csdn.net/runner_diego/article/details/51379116
若能够自行读取互联网上的网页信息并进行分析,那就可以通过修改网页信息实现控制家里的电器开关了。举个例子,互联网上的博客非常多,注册一个博客,发布一个博文,修改该博文内容,使用掌控板读取该博文内容就可以……
有需要的同仁可以添加公众号linkallStudio获取详细资料。
亦可扫描: https://mc.dfrobot.com.cn/data/attachment/forum/201811/05/215729edaiifefjidvsf7x.jpg 关注公众号。
高手啊。{:5_148:}
页:
[1]