当前位置: 首页 >应用方案 >技术应用 >

基于天气API接口讲解HTTP协议的使用教程

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组合成为请求数据:

1

这里我采用城市ID的方式进行请求,点击丫丫天气城市ID编码列表:

配置2

以查询“成都”城市编码为例,打开网站后使用“Ctrl+F”搜索成都,编码为:CH270101,如图所示:

配置3

丫丫天气的API接口是基于HTTP1.0协议开发,因此串口服务器无法通过HTTP客户端模式实现天气请求,只能利用TCP客户端结合短连接实现;

配置4

串口服务器配置为动态IP与随机端口,工作模式为TCP客户端,并使能短连接(非必要,建议使能),配置目标IP与端口(api.yytianqi.com:80),详细配置如下图所示:

配置5

4.打开串口调试助手XCOM,发送GET请求包GET http://api.yytianqi.com/observe?city=CH010100&key=ixxxxxxxxxxxxxxh HTTP/1.0\r\n\r\n”(\r\n\r\n指代两个换行符):

配置6

心知天气查询

1心知天气与丫丫天气在账户认证上基本相同,但心知天气支持更安全的签名认证,首先注册账号获取密钥,

登录后还需开通“天气服务”,如下图所示:

配置7

2在申请完成后系统会自动生成API密钥,如图所示:

配置8

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

1私钥认证

与丫丫天气基本相同,见请求包的key=your_private_key,替换为你的私钥,如图:

配置9

心知天气也采用HTTP1.0协议,也不能使用串口服务器的HTTP客户端模式,串口服务器配置如下图所示:

配置10

使用串口调试助手发用请求包:

GET https://api.seniverse.com/v3/weather/now.json?key=x&location=chengdu&language=en&unit=c

location=chengdu(支持城市ID、拼音、IPGPS、城市中文名)

language=en(支持zh-Hansen等);

unit=c(单位,cf);

配置11

2签名认证

“公钥 + 私钥” 验证方式更加安全。请求地址中只包含你的“公钥”以及用你的“私钥”制作的签名,因此不会在请求地址中泄露你的私钥。

签名指的是通过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参数进行加密,如下图所示:

配置12

签名: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

串口服务器配置与私钥相同,通过串口调试助手发送数据:

配置13

通过编写MCGS串口数据解析脚本可以实现如下效果:

配置14

https://www.wjx.cn/jq/84863372.aspx