cpp 有什么简洁的方案可以时间 http 请求吗?

2021-08-19 13:44:14 +08:00
 woshichuanqilz

网上找了不少例子在 VisualStudio2019 里面都不能用 系统是 windows

9265 次点击
所在节点    C++
115 条回复
sanyuedev
2021-08-19 17:08:46 +08:00
Java 开发 弱弱的问一下 C++ 用 http 是不是没有库的话要自己解析 socket ..
jorneyr
2021-08-19 17:10:28 +08:00
封装了 Qt 的 Http 请求,调用方式如下,参考 http://qtdebug.com/qtbook-network-http-httpclient/

HttpClient("http://localhost:8080/api/rest").success([](const QString &response) {
qDebug().noquote() << response;
}).get();

// [3] POST 请求,使用 param 添加参数,请求的参数使用 Form 格式
HttpClient(url).debug(true).param("name", "卧龙").param("value", 99).success([](const QString &response) {
qDebug().noquote() << response;
}).post();
encro
2021-08-19 17:10:33 +08:00
@AoEiuV020
@nannanziyu

门槛是相对的,

但是 C++门槛高是公认的,也是不会去重点改善的,看过作者原著的人应该都会有这个认识吧。

跨平台多字节处理就会搞死一批人,到 20 还没解决,提案到解决还要好几年吧。

如果 C++门槛低了,就没 Rust,C,GO,Python 一堆语言什么事了吧?
nannanziyu
2021-08-19 17:12:40 +08:00
@AoEiuV020
还是说,如果你看完流程,还觉得是门槛的话
如果你是学生:没关系,慢慢提升
如果你工作年限 2 年内:先不要 leetcode 和背题了,尝试找些稍微大的项目,尝试完整实现,在尝试过程中,逐渐提升自己的“搜索资料,尝试解决问题的能力”,这是你的瓶颈
如果你工作年限在 2-3 年内:尝试考公吧,换工作还来得及
如果你工作年限在 3 年外:只能说一句晚安了
lucays
2021-08-19 17:17:31 +08:00
如果这么一个请求都要三年经验,还不算门槛么?
Rheinmetal
2021-08-19 17:21:12 +08:00
@nannanziyu
有这个流程 java 和 node 已经用脚手架把项目搭起来了
天下底层开发者苦 cpp 久矣
LotusChuan
2021-08-19 17:29:00 +08:00
这是把自己的能力高低给当最低标准了吗。还是主要目的是进来给别人规划人生。
nannanziyu
2021-08-19 17:29:37 +08:00
@Rheinmetal
语言是工具,每种工具都有适合自己的地方
java 和 node 用 cli 把项目搭起来之前,curl 已经把结果展示在控制台上了
并不能说明 java 和 node 门槛比 curl 高
c++ 门槛不高,可以当 C with class 来写;门槛也可以高,写自己都看不懂的模板
这个简单的实现一个 http 请求的门槛不高
bfdh
2021-08-19 17:36:20 +08:00
curl --libcurl 甚至能帮你把 demo 写了。
benzalus
2021-08-19 17:41:29 +08:00
主要是门槛的一个定义问题。对我来说,门槛大概是开箱即用的程度。像 python 3 句话搞定的,c++和这些比起来门槛就相对较高了
怎么搞的跟辩论赛似的
ysc3839
2021-08-19 17:59:48 +08:00
@AoEiuV020 #18
你说不能复制粘贴搞定,理论上配合第三方库是可行的。
前面 @nannanziyu 提到的 cpp-httplib 就已经是 header-only 的库,已经不需要你自己去折腾编译了,主要问题是那个库没有适配各个操作系统原生的 TLS API,而是省事直接用了个外部库,因此多了那几步,本质是看有没有别人帮你封装好,与语言无关。
但如果你想说别的语言都内置 http 库了,C++ 还没内置,所以门槛高,那你的结论是对的,因为 C++ 的标准委员会就是这个风格。但是在这个问题下说这个并没有意义,你只是把大部分 C++ 用户都知道的事实复述了一遍,对解决问题毫无帮助。
wevsty
2021-08-19 18:08:37 +08:00
首先,我觉得理解 include 、link 、lib 是 c/cpp 的基本功,这不需要几年的工作经验来学习,也完全不是什么高门槛。
任何语言都面临怎么使用库的问题,不能说因为默认没有某某库就说这个语言的使用门槛高。

cpp 与其说门槛高,不如说是上限高。
毕竟你可以选择把 cpp 写成简单的 C 代码或者 C with class,也可以适当使用 cpp 的特性写出一些简单易懂的模板。
毕竟没有规则强迫你必须写成精品代码,也不必把模板写成谁也看不懂的样子。
AoEiuV020
2021-08-19 18:11:55 +08:00
@ysc3839 你这个说的没错,
”你只是把大部分 C++ 用户都知道的事实复述了一遍,“
然而真有人不知道,还怼我,这就让我不爽了,

另外,”对解决问题毫无帮助。“
我的确不是来解决问题的,让我做的话应该会引用 libcurl, 我并不知道更简单的,所以没有回答问题,
hankleeeeeee
2021-08-19 18:12:23 +08:00
1
www5070504
2021-08-19 18:18:58 +08:00
@AoEiuV020 跟他们抬杠就已经落下风了 还是不理就好了
ZXCDFGTYU
2021-08-19 18:21:21 +08:00
这不就是个 HTTP 服务端和客户端的 C++实现的问题么。。这两个问题随便哪个百度一下得到答案的所需时间成本超过 15 分钟?不明白这吵来吵去 30 多层楼的意义。。
nannanziyu
2021-08-19 18:21:31 +08:00
@AoEiuV020
你要复制粘贴的方法? OK
1. VS 新建一个 Cpp console 工程,工程右键 -> Manage nuget packager
2. 搜索 cpprestsdk,并 点击 install

3. 复制以下代码替换 main.cpp ,然后 F5

#include <iostream>
#include <cpprest/http_client.h>
int main()
{
web::http::client::http_client client(U("https://postman-echo.com/get?a=b"));
auto rsp = client.request(web::http::methods::GET).get();
auto body = rsp.extract_string().get();
std::wcout << rsp.status_code() << "\n" << body << std::endl;
}

nannanziyu
2021-08-19 18:30:51 +08:00
@AoEiuV020
<amp-youtube data-videoid="yOqH2wtvzSo" layout="responsive" width="480" height="270"></amp-youtube>全部过程录屏
l00t
2021-08-19 18:34:07 +08:00
@ipwx conan 本身配置就挺麻烦的啊,cmake 也是得自己写,距离一键还远。
OneMan
2021-08-19 18:34:29 +08:00
c++确实门槛高,搞个什么 http,ssl 最烦了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/796751

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX