5287浏览
查看: 5287|回复: 1

[高级教程] 原始构建物联网系列之使用掌控板读取网页信息

[复制链接]
    掌控板使用了ESP32芯片,这让它具有了联网的能力!通过掌控板读取网页信息进行数据分析,提取相应指令后一样是可以控制家中的电器开关。
准备工作:
使用tomcat或其他一些Web服务器,设置其首页内容为:
<script language="javascript">
  location.href="/login/userlogin.jsp";
</script>
程序代码段01(参考网址:https://mpython.readthedocs.io/z ... 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.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执行结果得到相关信息截图
原始构建物联网系列之使用掌控板读取网页信息图2
若是不执行“s.send("Host:192.168.1.112\r\n")  ”则是如下结果
原始构建物联网系列之使用掌控板读取网页信息图1
若是要访问搜狐首页,则可以将代码中的“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.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[0:datas.find(":")]
          headvalue=datas[datas.find(":")+2:len(datas)]
          requestContextDict[headkey]=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获取详细资料。
  亦可扫描: 关注公众号。


rzyzzxw  版主

发表于 2018-12-23 18:46:08

高手啊。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail