HTTP超文本传输协议是一个基于TCP/IP通信协议来传递数据的(HTML文件、图片文件、查询结果等),本文将使用NA111工业级串口服务器或者其他支持TCP/IP协议的网络联网模块(比如EC04系列、EC03系列、4G-05等),本文主要通过TCP客户端模式进行HTTP请求,有时也会使用HTTPC模式进行HTTPC请求(前提时HTTP服务器支持该模式请求报文)。
首先需要找到可以请求的天气查询服务器,这里介绍两个免费接口,需要注册使用:
丫丫天气:http://www.yytianqi.com/
心知天气:https://www.seniverse.com/
还有很多类似的API接口,他们在使用方式上差异不大。
1.打开天气服务器网址http://www.yytianqi.com/点击右上方注册按钮,提供邮箱和手机号进行注册,
2.注册完成后登录,第一次注册赠送9天高级会员,可以查询更多的天气数据,在会员管理中查看用户密钥(key),此密钥在请求数据中作为用户有效性判断(判断会员等级,非会员服务器拒绝请求),因此必须注册使用,并使用邮箱激活账号;
免费会员有请求限制比如心知天气的每分钟最多20次,丫丫天气的每小时30次,不同服务器限制不同需要通过平台查询请求限制。
3.点击API介绍详细介绍了API的使用方式,通过GET方式请求:
地址:api.yytianqi.com:80,
URL:/接口名称?
请求数据:city=城市ID&key=用户key组合成为请求数据:
这里我采用城市ID的方式进行请求,点击丫丫天气城市ID编码列表:
以查询“成都”城市编码为例,打开网站后使用“Ctrl+F”搜索成都,编码为:CH270101,如图所示:
丫丫天气的API接口是基于HTTP1.0协议开发,因此串口服务器无法通过HTTP客户端模式实现天气请求,只能利用TCP客户端结合短连接实现;
串口服务器配置为动态IP与随机端口,工作模式为TCP客户端,并使能短连接(非必要,建议使能),配置目标IP与端口(api.yytianqi.com:80),详细配置如下图所示:
4.打开串口调试助手XCOM,发送GET请求包“GET http://api.yytianqi.com/observe?city=CH010100&key=ixxxxxxxxxxxxxxh HTTP/1.0\r\n\r\n”(\r\n\r\n指代两个换行符):
1、心知天气与丫丫天气在账户认证上基本相同,但心知天气支持更安全的签名认证,首先注册账号获取密钥,
登录后还需开通“天气服务”,如下图所示:
2、在申请完成后系统会自动生成API密钥,如图所示:
3、心知天气的请求分为两种方式:
私钥认证https://api.seniverse.com/v3/weather/now.json?key=your_private_key&location=beijing&language=zh-Hans&unit=c
签名认证方式
https://api.seniverse.com/v3/weather/now.json? location=beijing&language=zh-Hans&unit=c&ts=1443079775&ttl=300&uid=your_public_key
与丫丫天气基本相同,见请求包的key=your_private_key,替换为你的私钥,如图:
心知天气也采用HTTP1.0协议,也不能使用串口服务器的HTTP客户端模式,串口服务器配置如下图所示:
使用串口调试助手发用请求包:
GET https://api.seniverse.com/v3/weather/now.json?key=x&location=chengdu&language=en&unit=c
location=chengdu(支持城市ID、拼音、IP、GPS、城市中文名);
language=en(支持zh-Hans、en等);
unit=c(单位,c和f);
“公钥 + 私钥” 验证方式更加安全。请求地址中只包含你的“公钥”以及用你的“私钥”制作的签名,因此不会在请求地址中泄露你的私钥。
签名指的是通过HMAC-SHA1,对请求参数加密后得到的签名字串进行身份验证,避免了将“私钥”明文包含在请求中而造成泄露。
HMAC-SHA1在线加密网站:https://1024tools.com/hmac
请求示例:
GET https://api.seniverse.com/v3/weather/now.json?location=beijing&language=en&unit=c&ts=1652095247&ttl=86400&uid=PlhQcyak4-TF5G0UU&sig=58QAjUWFAMpl7374DUVIiplsPqw%3d
location=beijing&language=en&unit=c不需要使用HMAC-SHA1进行加密,只需要对ts=1652095247&ttl=1800(非必要,不填默认为1800)&uid=PlhQcyak4-TF5G0UU参数进行加密,如下图所示:
签名:BlEgDUcNlP3Yhn7QvuGSWS15wqc=,“=”在HTTP中不能直接使用,需要转移为%3d,转换后BlEgDUcNlP3Yhn7QvuGSWS15wqc%3d
最终请求数据为:
GET https://api.seniverse.com/v3/weather/now.json?location=beijing&language=en&unit=c&ts=1652682517&ttl=86400&uid=PlhQcyak4-TF5G0UU&sig=BlEgDUcNlP3Yhn7QvuGSWS15wqc%3d
串口服务器配置与私钥相同,通过串口调试助手发送数据:
通过编写MCGS串口数据解析脚本可以实现如下效果:
7 X 24 销售服务热线
4000-330-990深圳办事处柯经理:18218726658 杭州办事处戴经理:17512568697
常州办事处崔经理:15906110783 南京办事处葛经理:17626012283
业务邮箱:support@cdebyte.com
全国销售投诉电话:19934352316
地址:四川省成都市高新西区西区大道199号B5栋(前台座机:028-61543675)
©© 成都亿佰特电子科技有限公司【版权所有】 蜀ICP备13019384号-3