Windows 一分钟使用 C++ 发送 Http 请求

2021-08-20 12:03:19 +08:00
 nannanziyu
有人说 c++ 发 http 请求麻烦,我不太认同,我认为一分钟内能搞定的事情,无论如何也谈不上“麻烦”
为了帮助后来人,方便以后英文不太好,常使用中文搜索的同学找到答案,我单独发到这里

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;
}


全程录屏:
<amp-youtube data-videoid="yOqH2wtvzSo" layout="responsive" width="480" height="270"></amp-youtube>
SEO Area:
C++ 发 http 请求
Cpp 发 http 请求
怎么用 Cpp 发 http 请求
http 请求 cpp
http 请求 c++
7394 次点击
所在节点    C++
92 条回复
nannanziyu
2021-08-21 10:14:18 +08:00
@lesismal
> 中毒的 cpper 千篇一律,清醒的工程师万里挑一

鉴于你连同楼里的信息都获取不了,我把 #11 #15 的内容再复制一遍给你看

你其实看看我以前的贴子
我主语言是 java
我主赚钱语言是 c#,之前做 UWP 年入差不多两百,当时安利大家做 UWP 的帖子在这里 https://v2ex.com/t/317307,里面收入 dashboard 都有,当时是真心安利,应该受益的人也不少;至少我同事里面跟我有好多人赚到了钱
关于语言:
我前后端很多语言都熟悉,毕竟做的年份多,加上爱好

语言是工具,每种工具都有适合自己的地方
Rust 也没有原生 http 库,C 也没有
语言各有优略,你说的这几门语言除了 golang,我都写过十几年,java 还是我的主吃饭语言
java 裹脚布
python 纸质书翻页需要游标卡尺
go 泛型都没有,1M 的源代码有 500k 的 if err != nil
javascript 弱类型大型项目管理困难,ts 救了无数人的命
如果只说语言优劣,那除了 ts 和 c# 别的都没有意义了?
还是那句话,语言是工具,每种工具都有适合自己的地方

不是我帮 c++说句话,我就是喜欢 c++,连党卫军都来了
我只是说现在 2021 年了,用 c++发个 http 请求并不麻烦,我也给出证据了
我根本不喜欢 c++,我自己喜欢的是 ts 和 c#

PS:
1. 刚入门的人才会用语言冠人,goer, javaer, phper, cpper 等等,再过两年,你就知道语言只是工具了。
就像你不能因为今天吃了个汉堡,就叫自己 hamburger 一样。
2. 这楼里,你和 @darknoll 两个刚入门的人,蹲在井底一块落砖上,却以为站在高台上指点别人,贻笑大方。走出井看看,你会发现世界不一样
Juszoe
2021-08-21 10:18:57 +08:00
最近折腾 c++的 opencv 和 x265,对我这个 python 程序员来说太煎熬了
zxCoder
2021-08-21 10:44:14 +08:00
所以结论是 c++门槛低吗。。。
Cbdy
2021-08-21 11:11:36 +08:00
不懂 C++,看着感觉挺麻烦的😳,这可能是楼主能找到的最简单的方法了吧?也许这就是 C++的门槛吧

Windows 要装一个几个 G 的 VS,macOS 看着更麻烦
lesismal
2021-08-21 11:16:36 +08:00
> 我主语言是 java

我之前看到你说主语言是 java 了。
我讲的跟主语言没关系,而是对待 cpp 的态度。太多人沉迷于维护 cpp 的名声而不自知了。

> 2. 这楼里,你和 @darknoll 两个刚入门的人,蹲在井底一块落砖上,却以为站在高台上指点别人,贻笑大方。走出井看看,你会发现世界不一样

我也快 40 了,十几年前最早就是开始写 c/c++ 写了好多年,现在已经不靠代码为生。至于水平,这里有我两个 go 的 repo:
https://www.v2ex.com/t/794435#reply1

做的晚,宣传力度小,star 少,但你可以对比下同类 repo,再来评价我是不是刚入门:
https://github.com/cloudwego/kitex-benchmark
https://github.com/lesismal/go-net-benchmark

《一代宗师》里「老猿挂印回首望,关隘不在挂印,而是回头」。
对于 cpp,回头的含义可以理解为:能够正视 cpp 的问题,而不是用 “如何解决 cpp 的某个问题” 来解释 “所以 cpp 没这个问题”。你用 1 分钟发 http 请求,就相当于是在用 “如何搞定发 http” 来跟别人 battle “cpp 门槛高” 的问题。

之前帖子里我没有回复也是因为懒得去 battle cpp 相关的,以前在各种老论坛、技术群跟人 battle 得太多了,对于 cpp 最清醒的大概两类人,一类是顶尖一批接近语言律师级别的大神、既能精通各种语法予以模式又能在实际业务中合理运用,一类是独孤九剑式的清醒工程师、知道什么不利于工程所以弱水三千只取 cpp 最合适的那一瓢或者几瓢来做项目。剩下的要么被 cpp 折磨要么转其他了。
lesismal
2021-08-21 11:25:14 +08:00
楼主还忽略了一点,跟你争论的人里是有不少熟手的,这些都是可以自己解决原贴的 cpp 问题的人,然而这些人同样认为 cpp 门槛高。各位 battle 的点,是门槛高,而不是如何解决发送 http 请求这个问题本身了。

我前面说学 cpp 关隘在于 “回头”,技术交流又何尝不是,在并非技术细节本身而是对技术认可相关评价的问题上,更广大用户的态度是不认可,而自己却一味坚持去解释它并不这样。

每次的自我否定通常也会给自己带来知识和心境的提升,早回头,少浪费点时间吧。
MakHoCheung
2021-08-21 11:29:00 +08:00
@nannanziyu 所以你做的是什么 uwp,我去搜搜看看
Cbdy
2021-08-21 11:30:55 +08:00
@lesismal 可能还有一种工程师的选择,就是不碰 C++
Linux Kernel 、Git 、Redis 、Postgres 、Nginx 这种世界级的项目为什么选择 C ? Linus 为什么痛骂 C++?我不禁陷入了沉思😔

我感觉上,C++就是碰瓷营销 C 语言,就像 JavaScript 碰瓷营销 Java 一样,把很多人都迷惑了
nannanziyu
2021-08-21 11:52:16 +08:00
@lesismal
> 我讲的跟主语言没关系,而是对待 cpp 的态度。太多人沉迷于维护 cpp 的名声而不自知了。

同楼里我说了很多次,我不喜欢“C++,只说语言,我最喜欢的是 ts 和 C#”
我并没有“维护 cpp”,我想说的就是一句 “2021 年了,c++ 发一个简单的 http 请求不麻烦了”
你要打靶应该对这这句话来打
而不是进入自己逻辑怪圈,树一个我“维护 cpp”的靶子,然后自己来打

> 至于水平,这里有我两个 go 的 repo
github 怪相,某些语言写多好的库,也就几百 star ;
有些语言,随便写个玩具就上千 star,比如 go 和 前端语言 以及 mac 相关项目
我用小号随便写个 swift 的玩具 https://github.com/gragrance/CaptuocrToy,都 1.3k star
所以没错,star 并不能反映水平
因为我怕被熟人认出来嘲笑自己这么大,还和人在网上对线,我这个账号没有公布过主 github 账号,我只能说我主账号也有 go 项目,star 数也不比你的少
你的项目确实不错,所以我觉得更不应该用语言冠人吧

> 对于 cpp,回头的含义可以理解为:能够正视 cpp 的问题,而不是用 “如何解决 cpp 的某个问题” 来解释 “所以 cpp 没这个问题”。你用 1 分钟发 http 请求,就相当于是在用 “如何搞定发 http” 来跟别人 battle “cpp 门槛高” 的问题。

感觉你还是没有看完帖子
我提供了“在不知道解决方法的时候,如何通过搜索引擎和网络,寻找解决问题的”方法
包括如何搜索关键字,如果寻找答案
但是对方说“需要搜索的都不算,必须直接复制粘贴才算答案“,所以才给出了这个主楼的答案
lysS
2021-08-21 11:54:09 +08:00
再来个 HTTPS 的🐶
cs419
2021-08-21 12:01:23 +08:00
1. 楼主是仅仅想表达 c++发起 http 简单 ?
还是想说 C++门槛不高 ?

2. 如果是想说 C++门槛不高
能否说点 对新手友好的教程

对 门槛高 的理解
初期容易劝退新手 就认为是门槛高
比如 新手看 Java 编程思想 就容易劝退 (缺少交互感)
这类大头书 更适合查漏补缺 已经上手的人 去打磨细节

用 python java 这类语言 能很轻松的实现一些功能
(有交互感,比如爬虫咋写,能较主动的思考咋写)
从这个角度 c++ 门槛高
(交互感差,比如 字符串的操作,逼着自己去学咋写)
当然 从底层的角度看 c++ 应该是 比 汇编友好的

所以问下楼主
c++ 有对标 python java 这类语言
REPL 的交互感 强点的教程(书籍、视频、系列博文等)吗


另外挺多教程都是教语法,不教相关工具的
如果说教 java 却不教 maven 这样的话 那显然是不友好的

ps: 在某些人眼中,没学过数据结构、操作系统原理之类的,不配自称程序员。
nannanziyu
2021-08-21 12:09:18 +08:00
@cs419
> 楼主是仅仅想表达 c++发起 http 简单 ?还是想说 C++门槛不高 ?
我想说的就是一句 “2021 年了,c++ 发一个简单的 http 请求不麻烦了”

> c++ REPL 强点的教程(书籍、视频、系列博文等)吗
书籍我不知道
c++ 可用的 REPL 的库可以尝试下 http://chaiscript.com
但各个语言都各自的用武之地,不用太挣扎
gBurnX
2021-08-21 12:10:35 +08:00
@zakokun

[web::http::client::http_client clien 这么长一串] ,是因为有些复杂的项目,不同的包路径里会存在同名的类,因此不 import 而是直接写出这么一长串的绝对路径,是为了处理这个问题。
lesismal
2021-08-21 12:11:25 +08:00
@Cbdy 基础设施的领域,因为开发者自身水平比较高,通常 c 也能搞定。基础设施用 c++的,牛逼的团队会限制姿势使用 c++比如只用 c with class and stl 。内存敏感的领域甚至连 stl 都是要禁的。

非基础设施的领域,因为涉及到很多更偏商业业务的,开发人员水平也有很多初级中级,所以单就 stl 讲就比纯 c 好用的多。尤其是还有很多年代背景,那个年代还是 tr1 、boost 早期阶段,没有 c++11 到 21 这些更加闹心的语言标准和姿势,那时候有很多 c++的老项目。现在仍然有很多性能敏感的偏商业业务是 c++的天下,因为 rust 还太年轻,需要一些年头去过度才能大面积取代 c++。

> 可能还有一种工程师的选择,就是不碰 C++
牛逼点的工程师,还是需要一些 c++的积累的。可以选择不用,但至少自己能够知道为什么不用、并且用其他的什么能在性能、开发效率、商业之间收获更好的平衡收益。

> C++就是碰瓷营销 C 语言,就像 JavaScript 碰瓷营销 Java 一样,把很多人都迷惑了
也不算碰瓷,c++诞生的年代,确实需要比 c 更方便一些的功能来让业务开发效率得到提升,c 是对于高手相对友好,但是复杂业务仍然门槛高,比如内核你去读源码,一个逻辑十几层的宏看着看着就忘记了从哪里过来的、非常耗费时间。cpp 相比于 java 的一大劣势是作者本身,bj 老爷子本身是偏学术型的学者而非偏商业的大佬,并且那个年代,前面的编程语言可借鉴的主要是 c,而 java 是 sun 公司搞出来的,性能其次考虑,很多特性尤其是 gc 和成熟的社区方案供给,对开发者太友好了、可以极大促进商业成功。
c++也并非失败,只是相比于稍晚辈的 java 的成功显得差一些。去年看到一篇 bj 老爷子的专访,还是比较客观的:
https://new.qq.com/omn/20201117/20201117A0988S00.html

我看好 rust 逐渐在更多领域替代 cpp
lesismal
2021-08-21 12:20:04 +08:00
@nannanziyu
> 我想说的就是一句 “2021 年了,c++ 发一个简单的 http 请求不麻烦了

兄台,你仔细想想,不管是不是包括搜索的步骤,你想去极力说明的观点,对于跟你辩论的同学来说,就是在说明 cpp 门槛不高。所以上一个帖子我也看了但是没在里面回复。

其实最简单的一点,你来一句“cpp 门槛确实高,但之前的楼主主要是研究方法不当、比如连搜索都不太会”,就能避免大家的分歧。

年纪越大了,就越知道很多事情都是在浪费时间,所以,这个问题我要“回头”了,再回帖只交流技术好了。
nannanziyu
2021-08-21 12:20:58 +08:00
> 楼主还忽略了一点,跟你争论的人里是有不少熟手的,这些都是可以自己解决原贴的 cpp 问题的人,然而这些人同样认为 cpp 门槛高。各位 battle 的点,是门槛高,而不是如何解决发送 http 请求这个问题本身了。

1. 如果认真讨论当然没有问题了
但是如 #1 这样的,我引用下

> 我全程看完,只是觉得承认 CPP 门槛相对更高又不是什么丢人的事情,你这么纠结干啥?那帖子都是默认楼主零基础> 吧。我假设自己是新人,从你发的这些来看,vs 这东西好几 G,安装要激活码的,我从哪里弄?我是 MacOS 系统 vs > for Mac 和你发的界面不一样的,相对于脚本语言就是有门槛啊。 顺便说,看到 web::http::client::http_client clien 这> 么长一串我就笑出来了

连 namespace 概念都没有,四句话三句错的还有 17+赞,就难免让人无语了

2. rust 也没有 std http 库
lesismal
2021-08-21 12:23:00 +08:00
另外,我并不是想用自己两个库 star 数量来说明自己水平还可以,因为相比于同类项目动辄头部大厂团队多年积累、或者 5k+ star,而我那两个性能综合指标、易用性、扩展性都更强,star 数少得可以忽略。。。
nannanziyu
2021-08-21 12:27:17 +08:00
@lesismal
> 你来一句“cpp 门槛确实高,但之前的楼主主要是研究方法不当、比如连搜索都不太会”,就能避免大家的分歧。

哎,可能我们的分歧就在这里
我认为”搜索和提问“不能算作一门语言的门槛,现在搜索几乎是生活必须技能,现在电器都没有说明书了,某些功能不会,都是二维码或者搜索引擎
我觉得我在提供的两种方法中已经排除了任何算作门槛的东西

至于门槛,我从头到尾都没有争执过,我一直说:c++可以干脆连 C with object 都不用,当面向过程的 C 写,0 门槛;也可以写自己一个月后都需要看半天才能理解的复杂模板。
lesismal
2021-08-21 12:41:55 +08:00
@nannanziyu 对,很多不必要的争论都源自误解的分歧,所以没必要。回头望跟跳出圈外看事情是一个道理,往往旁观者清。
GeruzoniAnsasu
2021-08-21 13:04:58 +08:00
看完我都笑了
c++现在都成原罪了

原题说 c++发 http 请求好难写,答主说有简单办法:用现成的包管理和某个库,几行就能搞定
我点进来的反应,wow 现在 nuget 真 nb amazing


其它人的反应:
- 装 vs 本身门槛就很高了
- c++落后时代没前途
- 语法真复杂好麻烦
- c++生态硬伤
- ……


「……你们前端怎么把时间戳转字符串?」
「啊……建议你用 moment 」
「……啥?我搜搜……哦……这样写……报错了?」
「哦对,可能我写的那个组件引用了个旧版本,等我更新一下」
「好了,你再拉一下」← git pull && rm && npm install,10 分钟
「……真 j8 麻烦」
「这是 js 生态的特性,不得不品尝」

我经历的真实对话(语句未 100%还原)

也是我经历的真实对话(语句也未 100%还原)

「你们 c++ 怎么发一个 http 请求」
「有个库,nuget 就能下,有 demo 」
「你们怎么还在用 c++哦」

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

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

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

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

© 2021 V2EX