Boost.Asio-使用Boost.Asio和OpenWeatherMap API获取天气的简单示例

OpenWeatherMap API是一个提供天气数据的开放接口,可以通过该接口获取全球范围内的实时天气。
1.获取OpenWeatherMap API的密钥
去官网https://openweathermap.org注册后,自主生成密钥,如图

在这里插入图片描述

2.获取用的代码(方法1)

#include "stdafx.h"
#include <iostream>
#include <boost/array.hpp>
#include <boost/asio.hpp>
#include <algorithm>using boost::asio::ip::tcp;
int main()
{try{boost::asio::io_context io_context;// 创建一个TCP连接tcp::resolver resolver(io_context);tcp::resolver::results_type endpoints = resolver.resolve("api.openweathermap.org", "http");tcp::socket socket(io_context);boost::asio::connect(socket, endpoints);// 发送HTTP请求std::string request = "GET /data/2.5/weather?id=1816670&appid=c7c9b4。。密钥需换成自己的 HTTP/1.1\r\n""Host: api.openweathermap.org\r\n""Connection: close\r\n\r\n";boost::asio::write(socket, boost::asio::buffer(request));// 读取服务器响应boost::asio::streambuf response;boost::asio::read_until(socket, response, "\r\n");// 输出响应结果std::istream response_stream(&response);std::string http_version;response_stream >> http_version;unsigned int status_code;response_stream >> status_code;if (status_code == 200){std::string status_message;std::getline(response_stream, status_message);std::cout << "HTTP/1.1 " << status_code << " " << status_message << std::endl;// 读取并输出天气数据std::cout << &response << std::endl;}else{std::cout << "HTTP request failed with status code: " << status_code << std::endl;}}catch (std::exception& e){std::cout << "Exception: " << e.what() << std::endl;}return 0;
}

2.获取用的代码(方法2)

int main(int argc,char* argv[])
{try{//if (argc != 2)//{//	std::cerr << "Usage: daytime_client <host>" << std::endl;//	return 1;//}tcp::iostream s("api.openweathermap.org", "http");if (!s){std::cout << "Unable to connect: " << s.error().message() << std::endl;return 1;}s << "GET /data/2.5/weather?q=BeiJing&appid=c7c9b.。。你的密钥 HTTP/1.1\r\n";s << "Host: api.openweathermap.org\r\n";s << "Connection: close\r\n\r\n";// Check that response is OK.std::string http_version;s >> http_version;unsigned int status_code;s >> status_code;std::string status_message;std::getline(s, status_message);if (!s || http_version.substr(0, 5) != "HTTP/"){std::cout << "Invalid response\n";return 1;}if (status_code != 200){std::cout << "Response returned with status code " << status_code << "\n";return 1;}std::cout << http_version << " " << status_code << " " << status_message << std::endl;// Process the response headers, which are terminated by a blank line.std::string header;while (std::getline(s, header) && header != "\r"){	std::cout << header << "\n";}std::cout << "\n";// Write the remaining data to output.std::cout << s.rdbuf();}catch (std::exception& e){std::cout << "Exception: " << e.what() << std::endl;}return 0;
}

服务器返回内容如下(原始字符串):
在这里插入图片描述
3.在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/468638.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BFS与DFS初级练习(排列数字,n-皇后,走迷宫)

BFS与DFS初步了解 DFS&#xff08;深度优先搜索&#xff09;和BFS&#xff08;广度优先搜索&#xff09;是两种常用的图遍历算法。 DFS是一种递归的搜索算法&#xff0c;它从起始节点开始&#xff0c;沿着路径依次访问与当前节点相邻的未访问节点&#xff0c;直到无法继续访问…

[NSSRound#17 Basic]WEB

1.真签到 看robots.txt 密码先base32再base64得到md5加密的密文&#xff0c;在线解得到密码为Nss hint用16进制转字符串&#xff0c;提示新生赛遇到过 是一个敲击码加密 账号是ctfer,登录之后源码提示在F111n4l.php 要求nss参数若比较等于732339662&#xff0c;但是不能是数…

助眠神器小程序源码|白噪音|小睡眠|微信小程序前后端开源

安装要求和说明后端程序运行环境&#xff1a;NginxPHP7.4MySQL5.6 PHP程序扩展安装&#xff1a;sg11 网站运行目录设置为&#xff1a;public 伪静态规则选择&#xff1a;thinkphp 数据库修改文件路径&#xff1a;/config/database.php需要配置后端的小程序配置文件&#xff0c;…

Unresolved reference: kotlinx 和 Unresolved reference:xxx

Unresolved reference: kotlinx 这个报错是因为build.gradle中忘记apply plugin了 apply plugin: kotlin-android-extensions如下 同步以后再次编译发现报错 Unresolved reference:xxx 是因为用于使用 Gradle 构建的 Kotlin 版本与 IDE 插件中的版本不一样的原因 解决方法 …

片上网络NoC(6)——路由算法

目录 一、概述 二、路由算法的类型 三、避免死锁 四、实现 4.1 源路由实现 4.2 基于节点查找表的路由实现 4.3 组合电路实现 五、总结 一、概述 路由算法&#xff08;routing algorithm&#xff09;&#xff0c;即决定数据包在网络拓扑中从起点到终点路径的算法。路由算…

【HTML】情人节给npy一颗炫酷的爱心

闲谈 兄弟们&#xff0c;这不情人节快要到了&#xff0c;我该送女朋友什么&#x1f381;呢&#xff1f;哦&#xff0c;对了&#xff0c;差点忘了&#xff0c;我好像没有女朋友。不过这不影响我们要过这个节日&#xff0c;我们可以学习技术。举个简单的&#x1f330;&#xff1…

基于 Python 的大数据的电信反诈骗系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

[Linux开发工具]项目自动化构建工具-make/Makefile

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1.背景2.依赖关系和依…

《区块链公链数据分析简易速速上手小册》第3章:区块链数据结构(2024 最新版)

文章目录 3.1 区块和交易的结构3.1.1 基础知识3.1.2 重点案例&#xff1a;构建简单的区块链3.1.3 拓展案例 1&#xff1a;验证交易签名生成密钥对签名交易验证签名完整的交易签名与验证演示 3.1.4 拓展案例 2&#xff1a;监听和解析区块链事件代币合约示例&#xff08;Solidity…

电路设计(18)——9路抢答器的设计与制作

1.设计要求 设计、制作一台9路抢答器&#xff0c;抢答器应符合如下工作过程&#xff1a; 每次抢答前&#xff0c;主持人首先按下复位键&#xff0c;将抢答器上“抢答号”数显复位&#xff0c;显示为“0”。接着&#xff0c;主持人念答题内容&#xff0c;念毕即叫“抢答…

详解Vue文件结构+实现一个简单案例

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

【STL】string的模拟实现

string类的模拟实现 一、接口函数总览二、默认成员函数1、构造函数2、拷贝构造函数&#xff08;1&#xff09;写法一&#xff1a;传统写法&#xff08;2&#xff09;写法二&#xff1a;现代写法 3、赋值运算符重载函数&#xff08;1&#xff09;写法一&#xff1a;传统写法&…