ESP8266 GZIP解压

序言

做个毕设要求要有天气预警,emm,行,上网整个API给他。

不就调用一个API的事嘛,切,然后在酒吧里面点了蛋炒饭(炸)了

问题一

首先,能够免费获取到天气预警的API只找到了一个,是HTTPS协议。问题不大,例程里面有https相关的代码,主要是获取SSL证书指纹,看到有教程里面说能用长期有效的指纹,但是实测在这个网站只能用短期指纹。

蛮简单的嘛

你已经学会怎么连接到API服务器了,现在开始获取数据吧!

地狱难度

为了得到目标数据,需要先发送一个GET请求,配合一些参数,服务器才会返回对应的数据

  String url = "/v7/warning/now?location=" + location + \
  "&lang=zh&key=1902689fcf164b3a8e36b1e11c68d81c";
  Serial.print("Requesting URL: ");
  Serial.println(url);
  //开始请求天气数据
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "Connection: close\r\n\r\n");

服务器返回的信息是由响应标头和数据组成,响应标头与数据之间由”\r\n\r\n”作为间隔

其中一定要知道的是数据有没有GZIP压缩过,压缩过的数据是不能直接读取的,需要解压。

这下头大了,ESP8266没有现成的库,百度必应谷歌也没有,然后就到GitHub上面找,就找到一个,只能学着用呗。现在看来我真是傻,这就是个算法而已,只需要简单移植就能正常使用

要使用这个库的解压函数,需要知道源数据本身和他的长度,数据长度可以在响应标头读取

  char *length_string = strcasestr(line.c_str(), "Content-Length:");
  if (length_string) {
    sscanf(length_string, "%*s%d", &resp_length);
  }

然后就可以正常解析了,可喜可贺

总结

事后看来也没这么难嘛。。。。。。

但是还是很感谢以下两个帖子给的解决方法,阿里嘎多!

https://yuanze.wang/posts/esp32-unzip-gzip-http-response/

https://github.com/tignioj/ArduinoUZlib

感谢,真的非常感谢

评论

  1. YIN
    1年前
    2023-8-05 22:22:39

    您好,我最近也在研究关于此天气api的数据获取,也是ESP8266,但我在gzip解压的部分卡住了,文章我看了,想知道您具体的解决方法是什么,谢谢,如果您愿意帮助我通过邮箱和我联系吧

    • 博主
      YIN
      1年前
      2023-8-13 17:02:52

      你好,以通过邮件将源码发送给你

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇