网上找了不少例子在 VisualStudio2019 里面都不能用 系统是 windows
1
janus77 2021-08-19 13:47:20 +08:00
curl 不行?
|
2
AoEiuV020 2021-08-19 14:29:08 +08:00
c++门槛还是这么高吗,一个 http 请求都很麻烦?
|
3
nannanziyu 2021-08-19 14:30:42 +08:00 1
https://github.com/yhirose/cpp-httplib
A C++11 single-file header-only cross platform HTTP/HTTPS library. |
4
nannanziyu 2021-08-19 14:32:43 +08:00
|
5
AoEiuV020 2021-08-19 14:40:04 +08:00 1
@nannanziyu 不至于,
要说有没有办法简单实现 http 请求我是一开始就相信有的, 但楼主的意思应该是已经在网上查找过,并且尝试过不少不可行的方案, 这就是前提了, 是说一个简单的 http 请求都能折腾到新手上来问, 而不是说 c++没有办法实现简单的 http 请求, 并没有什么错误, |
6
nannanziyu 2021-08-19 14:47:08 +08:00
@AoEiuV020
1. 首先 google 关键词 "c++ http library" 第二条结果就是 cpp-httplib 2. 楼主解决问题以及寻找答案的能力差,自己找不到答案,所以来请教,这是没有问题,因为请教也是解决问题的一个方法,至少努力了 但是看到一个错误前提,不花时间思考,条件反射地得出结论,不是解决问题的方法 |
7
AoEiuV020 2021-08-19 15:02:47 +08:00 18
@nannanziyu 感觉你这是习惯性偷换概念了,
我都说了我前提是楼主已经出来问了,你依然觉得你有解决方案而楼主没有就能说明是楼主不行,不是 c++门槛高, 另外我花了几分钟下载试了一下你说的这个库,甚至没有想像中的方便,这东西还依赖 openssl,不开启 CPPHTTPLIB_OPENSSL_SUPPORT 就不支持 https,开启了没有 openssl 就报错, 像我这种能力差的依然不能简单利用起来实现 http 请求,说一句“c++门槛还是这么高” 没毛病吧, |
8
shawnsh 2021-08-19 15:08:52 +08:00 via Android
确实没有 modern cpp 风格的好用的 http 库
|
9
ztcaoll222 2021-08-19 15:26:21 +08:00
用 qt
|
10
ipwx 2021-08-19 15:32:36 +08:00 1
|
11
wutiantong 2021-08-19 15:45:02 +08:00
@ipwx vcpkg 不香吗?
|
12
jpacg 2021-08-19 15:46:07 +08:00
c/c++用别人的轮子都麻烦,特别是在 Windows 下。
|
13
Otho 2021-08-19 15:56:36 +08:00
vcpkg + cpprest Qt 的也不是很好用。
|
14
nannanziyu 2021-08-19 16:44:12 +08:00 8
@AoEiuV020
好,我来把解决“cpp 解决 http 请求”的整个流程列一下,你说说哪个步骤门槛高 1. 要做 http 请求,肯定找一下相关库,所以用 google 搜索 "c++ http library",第二条结果就是 cpp-httplib 2. 进入 cpp-httplib github 主页,花两分钟看下文档,ok,需要 “SSL support is available with CPPHTTPLIB_OPENSSL_SUPPORT. libssl and libcrypto should be linked.” 3. 尝试寻找 windows openssl library,使用 google 搜索 "windows openssl library download",同样第二条结果就是 4. 点击第二条进入 Openssl Binaries 下载主页 页面仔细看一下就知道下哪个。就算不知道在页面里搜索 library,一共三条结果,排除掉第二个 for ICS 的,一共就两个,下载下来 5. 把下载的 lib 和 headers 加入工程,实例代码拷贝一下,F5 你说说这里哪个门槛高?也只有第五步需要有一点点 L l IncludePath 的概念,但是连 IncludePath 也叫门槛吗? |
15
araraloren 2021-08-19 16:47:10 +08:00
你说的网上是 CSDN 吗???????
|
16
nannanziyu 2021-08-19 16:49:48 +08:00 2
说实话,我之前都是用 cpprestsdk 和 QT 的,因为楼主要“简单方案”,所以今天是第一次接触 cpp-httplib
上面全部尝试过程都是"第一次接触",然后“尝试解决问题”的过程 程序员这个行业,搜索资料,尝试解决问题的能力是很重要的 如果觉得这个都有门槛,我真心觉得需要提升一下自己 |
17
bthulu 2021-08-19 16:59:29 +08:00
可以安装 nodejs, c++动态生成 http 的 js 代码, 调用 cmd 脚本执行, 再读取控制台返回数据流即可
|
18
AoEiuV020 2021-08-19 17:00:03 +08:00
@nannanziyu 一个简单的 http 请求,甚至不能复制粘贴运行直接搞定,还要谷歌搜索两次,还要看文档,还要下载合适的库,还要正确的引用库,这就是门槛,
|
19
AoEiuV020 2021-08-19 17:02:17 +08:00
@AoEiuV020 #18 这个流程已经可以用于“实现任何功能”了,然而仅仅是一个“简单的 http 请求”就需要这么麻烦的操作,你的门槛是被踩碎了吧,巨人,
|
20
nmap 2021-08-19 17:06:20 +08:00 1
这种问题自己 google 两分钟就搞定的事,还拿来问,还引来大佬们的骂架。。。
|
21
sanyuedev 2021-08-19 17:08:46 +08:00
Java 开发 弱弱的问一下 C++ 用 http 是不是没有库的话要自己解析 socket ..
|
22
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(); |
23
encro 2021-08-19 17:10:33 +08:00
@AoEiuV020
@nannanziyu 门槛是相对的, 但是 C++门槛高是公认的,也是不会去重点改善的,看过作者原著的人应该都会有这个认识吧。 跨平台多字节处理就会搞死一批人,到 20 还没解决,提案到解决还要好几年吧。 如果 C++门槛低了,就没 Rust,C,GO,Python 一堆语言什么事了吧? |
24
nannanziyu 2021-08-19 17:12:40 +08:00 2
@AoEiuV020
还是说,如果你看完流程,还觉得是门槛的话 如果你是学生:没关系,慢慢提升 如果你工作年限 2 年内:先不要 leetcode 和背题了,尝试找些稍微大的项目,尝试完整实现,在尝试过程中,逐渐提升自己的“搜索资料,尝试解决问题的能力”,这是你的瓶颈 如果你工作年限在 2-3 年内:尝试考公吧,换工作还来得及 如果你工作年限在 3 年外:只能说一句晚安了 |
25
lucays 2021-08-19 17:17:31 +08:00
如果这么一个请求都要三年经验,还不算门槛么?
|
26
Rheinmetal 2021-08-19 17:21:12 +08:00
|
27
LotusChuan 2021-08-19 17:29:00 +08:00 2
这是把自己的能力高低给当最低标准了吗。还是主要目的是进来给别人规划人生。
|
28
nannanziyu 2021-08-19 17:29:37 +08:00 2
@Rheinmetal
语言是工具,每种工具都有适合自己的地方 java 和 node 用 cli 把项目搭起来之前,curl 已经把结果展示在控制台上了 并不能说明 java 和 node 门槛比 curl 高 c++ 门槛不高,可以当 C with class 来写;门槛也可以高,写自己都看不懂的模板 这个简单的实现一个 http 请求的门槛不高 |
29
bfdh 2021-08-19 17:36:20 +08:00 1
curl --libcurl 甚至能帮你把 demo 写了。
|
30
benzalus 2021-08-19 17:41:29 +08:00
主要是门槛的一个定义问题。对我来说,门槛大概是开箱即用的程度。像 python 3 句话搞定的,c++和这些比起来门槛就相对较高了
怎么搞的跟辩论赛似的 |
31
ysc3839 2021-08-19 17:59:48 +08:00
@AoEiuV020 #18
你说不能复制粘贴搞定,理论上配合第三方库是可行的。 前面 @nannanziyu 提到的 cpp-httplib 就已经是 header-only 的库,已经不需要你自己去折腾编译了,主要问题是那个库没有适配各个操作系统原生的 TLS API,而是省事直接用了个外部库,因此多了那几步,本质是看有没有别人帮你封装好,与语言无关。 但如果你想说别的语言都内置 http 库了,C++ 还没内置,所以门槛高,那你的结论是对的,因为 C++ 的标准委员会就是这个风格。但是在这个问题下说这个并没有意义,你只是把大部分 C++ 用户都知道的事实复述了一遍,对解决问题毫无帮助。 |
32
wevsty 2021-08-19 18:08:37 +08:00
首先,我觉得理解 include 、link 、lib 是 c/cpp 的基本功,这不需要几年的工作经验来学习,也完全不是什么高门槛。
任何语言都面临怎么使用库的问题,不能说因为默认没有某某库就说这个语言的使用门槛高。 cpp 与其说门槛高,不如说是上限高。 毕竟你可以选择把 cpp 写成简单的 C 代码或者 C with class,也可以适当使用 cpp 的特性写出一些简单易懂的模板。 毕竟没有规则强迫你必须写成精品代码,也不必把模板写成谁也看不懂的样子。 |
33
AoEiuV020 2021-08-19 18:11:55 +08:00
@ysc3839 你这个说的没错,
”你只是把大部分 C++ 用户都知道的事实复述了一遍,“ 然而真有人不知道,还怼我,这就让我不爽了, 另外,”对解决问题毫无帮助。“ 我的确不是来解决问题的,让我做的话应该会引用 libcurl, 我并不知道更简单的,所以没有回答问题, |
34
hankleeeeeee 2021-08-19 18:12:23 +08:00
1
|
35
www5070504 2021-08-19 18:18:58 +08:00 1
@AoEiuV020 跟他们抬杠就已经落下风了 还是不理就好了
|
36
ZXCDFGTYU 2021-08-19 18:21:21 +08:00
这不就是个 HTTP 服务端和客户端的 C++实现的问题么。。这两个问题随便哪个百度一下得到答案的所需时间成本超过 15 分钟?不明白这吵来吵去 30 多层楼的意义。。
|
37
nannanziyu 2021-08-19 18:21:31 +08:00 2
@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; } |
38
nannanziyu 2021-08-19 18:30:51 +08:00 2
@AoEiuV020
全部过程录屏 |
40
OneMan 2021-08-19 18:34:29 +08:00
c++确实门槛高,搞个什么 http,ssl 最烦了
|
41
casioyan 2021-08-19 18:35:21 +08:00 2
@nannanziyu 如果这是一个公司内部技术讨论群,我觉得你这么说无可厚非,在论坛上只会让人觉得恶臭。
|
42
nannanziyu 2021-08-19 18:36:01 +08:00
为什么一开始不提供 cpprestsdk 的方法
因为楼主要简洁的方案 cpprestsdk 的门槛比 cpp-httplib 高的多得多得多,cpprestsdk 的模板代码没有 10 年工作经验看不懂;即使不看源代码只使用,因为 cpprestsdk 基于 pplx,天生异步 task,对于新手来说难度很高 而 cpp-httplib 更适合新手,只要有一点 cpp 基础,就能使用 门槛和简易度是没有关系的 |
43
hangs 2021-08-19 18:42:21 +08:00
楼主不会是参考的某*SDN 的吧。C++虽说有门槛,但我不认为没有开箱可用的 library 就算高门槛,只能算是繁琐吧
|
44
nannanziyu 2021-08-19 18:47:51 +08:00 5
|
45
lc1450 2021-08-19 18:51:57 +08:00
@nannanziyu #14 进了第一条链接,然后出不来了🐶
|
46
nannanziyu 2021-08-19 18:53:31 +08:00
@lc1450 那看下 #37 吧,#37 没有链接,不会监禁人 🐶
|
47
buddyy 2021-08-19 18:54:10 +08:00 1
啊哈哈哈,笑死我了🤣
|
48
AoEiuV020 2021-08-19 19:05:43 +08:00 via Android
@nannanziyu 自信一点,求你了,不要以为你能跨过的都不是门槛,你没有那么 low,
|
49
br00k 2021-08-19 19:06:57 +08:00
感觉对比其它语言来说还是比较麻烦的,特别跨平台的时候感觉多了很多坑。
😂习惯了包管理,添加依赖以后就可以随便写了。 |
50
nannanziyu 2021-08-19 19:12:57 +08:00 3
@AoEiuV020
新建工程,内置包管理点一下,复制粘贴 F5,真的算门槛吗? 我自问从头到尾都是好好说话,诚心帮助人,你句句杠字字刺,何苦呢 我也马上快四十了,见过的人里,脾菜比(脾气 /菜)你也算在前五了 |
51
nannanziyu 2021-08-19 19:17:22 +08:00 1
|
52
OxOzZ 2021-08-19 19:21:32 +08:00
看到快 40,马上就跟某种刻板印象匹配了,这帖子一下子合理了
|
53
AoEiuV020 2021-08-19 19:30:04 +08:00 via Android 3
@nannanziyu 你还是去睡觉吧,你没怎么见过我这样的,可你这样的我倒是在游戏区见过不少,提起魂类游戏就说简单的一匹,无伤就能打赢的 boss 有什么难的,就是你这种了,
|
54
bestwaytowait 2021-08-19 19:34:48 +08:00
相比于其它语言就是门槛高啊,这话没什么问题。还有 cpp 的包管理,相比其它一些语言的普及广度,使用深度,就是差很多啊,也没什么问题
|
55
zxCoder 2021-08-19 19:36:21 +08:00
看了半天楼上的讨论,所以 c++粉丝到底是希望门槛高好还是门槛低好啊
|
56
lingxi27 2021-08-19 19:44:09 +08:00
门槛确实是相对的,对于一个 c++程序员来说楼主的问题还不至于称为门槛
|
57
LANB0 2021-08-19 19:53:10 +08:00
对于需要往各种硬件平台移植各种库的开发者来说,我需要有一个可以按照各硬件平台依赖的包管理
|
58
zmxnv123 2021-08-19 19:53:52 +08:00
y1s1,c++相对于 Java, Python 引入库确实麻烦。
|
59
pengtdyd 2021-08-19 20:01:06 +08:00
睡觉,睡觉,我一个 java 程序员不掺和 cpp 的讨论
|
60
nicevar 2021-08-19 20:16:24 +08:00 1
@nannanziyu 你跟那种嘴巴厉害解决不了问题的人杠没意思,一个写 c++的,弄个 http 请求都算门槛的话,那门槛是平的了
|
61
zhoujinjing09 2021-08-19 20:28:55 +08:00 1
yysy 现代语言好像只有 C++标准库做不了这个事情要另外引入包
|
62
darknoll 2021-08-19 20:45:05 +08:00
c++这玩意,我司用了十年都转其他语言了
|
63
Hallelu 2021-08-19 21:42:58 +08:00 via iPhone
http 这块说实话对于稍微有经验的 c++来说,不是啥问题,随便在搜个库,编译配置依赖头文件链接就能用了,如果是 go,python 转过来要使用相对来说比 c++转到 go,python 使用 http 门槛高多了,毕竟人家就一句 http.Get()就完事了 :)没办法 这块是硬伤
|
64
darer 2021-08-19 21:46:23 +08:00
@nannanziyu 图不错 有原图吗(
|
65
FACEB00K 2021-08-19 21:51:01 +08:00
boost 和 Qt 随便用
|
66
iyear 2021-08-19 22:13:36 +08:00
可以,看吵架还学到了不少,自己还心情愉悦,血赚
|
67
AoEiuV020 2021-08-19 22:15:11 +08:00 via Android 1
@Hallelu 有经验了还谈什么门槛?门槛栏的是入门前的,搜个库,编译配置依赖头文件链接哪一步都不是入门前该会的,
|
68
jdz 2021-08-19 22:23:51 +08:00 via Android
brpc
|
69
mrsecond 2021-08-19 22:42:27 +08:00
还是用 Qt 的 QNetWorkAccessManager 吧,全面而且好用点
|
70
fzcf 2021-08-19 23:01:17 +08:00
到现在难道没发现楼主一句话没说嘛。难道这是引战贴???🤓️
|
71
ufan0 2021-08-19 23:17:31 +08:00
Blue DO 的同学发言一开始就是站在制高点,像极了一般的小 TL 。
友好交流是基础,而不是上来就是“只能证明自己无知”。 |
72
LotusChuan 2021-08-20 00:37:47 +08:00 via iPhone
回头来看这是引战的吗。这需求就算是在 stackoverflow 里面也能直接搜出来,都不用自己提问。就算是不行也好歹把哪不行给提出来吧。
|
73
neoblackcap 2021-08-20 01:48:49 +08:00
事实上 Windows 有自带的 Http 请求 API,完全可以什么第三方库都不用,只用 Windows 标准库就可以了。而且 msdn 有很好的文档以及例子。
当然了,微软的 API 好不好用则是另外一回事。 |
74
liprais 2021-08-20 02:13:12 +08:00 via iPhone 1
cpp 还有禁卫军也是少见
|
75
snailya 2021-08-20 08:27:58 +08:00
windows 的话,vcpkg,然后想用什么就用什么
|
76
sandman511 2021-08-20 09:00:48 +08:00 1
@nannanziyu
“请先确认前提,再引申结果,从错误前提引申的结果,只能证明自己无知“ "但是看到一个错误前提,不花时间思考,条件反射地得出结论,不是解决问题的方法" ”如果你工作年限在 2-3 年内:尝试考公吧,换工作还来得及“ 技术上不管对错 你说这些干什么?你太好为人师了 就跟楼主问:"求抖音上好玩的账号” 你回答:“少刷抖音 多学习“ 呕 |
77
sandman511 2021-08-20 09:04:13 +08:00 6
@nannanziyu
”我自问从头到尾都是好好说话,诚心帮助人,你句句杠字字刺,何苦呢“ 你觉得自己在好好说话 你在#4 说了别人无知 你在#6 说了别人不会思考 再此之前人家只是说了句 Cpp 门槛高罢了 您真的快 40 了嘛 你同事也太惨了 |
78
hatsuyuki 2021-08-20 09:19:55 +08:00
|
79
TomVista 2021-08-20 09:26:02 +08:00 1
|
80
wbbtcool 2021-08-20 09:38:58 +08:00 1
想起复联四里面灭霸对钢铁侠的一句话,你不是唯一被知识诅咒的人。知识诅咒,一旦知道某样东西,就很难想象不知道它的时候会是什么样子。
|
81
simo 2021-08-20 10:02:06 +08:00
本想正经回答,结果重温了小学课本的故事:小马过河
|
82
TSai2019 2021-08-20 10:05:35 +08:00 via Android
微软不是有 WinHTTP 吗
|
83
ysc3839 2021-08-20 10:19:02 +08:00
@TSai2019 有是有,但我个人觉得谈不上简洁,前置步骤太多了,发一个简单的请求甚至比 libcurl 需要的代码还多。
|
84
nannanziyu 2021-08-20 10:19:15 +08:00
|
85
nannanziyu 2021-08-20 10:30:53 +08:00 1
@sandman511
> 再此之前人家只是说了句 Cpp 门槛高罢了 No,他说的是“一个 http 请求都很麻烦” 而一个 http 请求非常容易。#37 楼的解决方案:建工程,自带包管理点一下,Copy & Paste 就完成了一个 http 请求 所以这是一个错误的结论 如果你看到一个人信誓旦旦的说 1+1 = 3,你会不会觉得他不会思考 |
86
Stoulla 2021-08-20 10:56:06 +08:00 via Android
啊,这个帖子我喜欢,虽然怼的火气有点重,但是都有理有据,甚至还有录屏。感觉回到了当初的互联网。
希望 l 大别把这帖子扔进水深火热了。真心希望论坛有更多这种有理有据互怼帖 |
87
hst001 2021-08-20 11:09:25 +08:00 via Android 1
@nannanziyu 什么叫门槛?入门的人才会遇到门槛,你说的一大堆对老油条来说就几分钟的事情,对新手就是几天,你以为搜索一下,其实新人还要去理解一大堆参数,这个库干什么的,那个库干什么的,然后找 API,很多老油条自然而然的过程,在新手那里就是问题,问题越多对这个新手来说门槛就是越高。一门语言,如果大部分新手入门都会遇到很多问题需要很多时间去熟悉解决,那只能说明这门语言门槛就是高。
|
88
skinny 2021-08-20 11:13:23 +08:00
又蠢又懒就别用这么麻烦的语言呗
|
89
qooweds 2021-08-20 11:17:15 +08:00
虽然每个人的背景不同
但是张口闭口就是菜的是真没礼貌 |
90
wangxn 2021-08-20 11:21:38 +08:00
C++ 的标准库确实太简陋了,基本是数据结构相关的,功能性的库少之又少,文件系统、线程、随机数这些即使有,我觉得也不算易用,基本是完美阐释什么叫过度设计。最典型的是连一点冗余都忍受不了,必须要想方设法地做到最精简。
假如 Google 能完整开源它们自己的内部库,那对业界是件大好事。现在是有一部分被开源出来了: https://abseil.io/ 这个库我是必用的,补充了很多标准库缺失的东西,而且非常易用。 |
91
nannanziyu 2021-08-20 11:25:19 +08:00
@qooweds
我哪里张口闭口说菜了 他说“一个 http 请求都很麻烦” 我 #14 拿证据出来,简单搜索几分钟就能得到结果 然后他说,“这不算,还要搜索,只有简单复制粘贴才能算不麻烦” 好的,然后我 #37 #38 给出了只需要复制粘贴的答案 然后他马上转进,原地三百六十五度打滚 然后就这,我一直被杠到 #50 才受不了说了句菜,人脾气再好,也会生气的吧 |
92
Jwyt 2021-08-20 11:25:53 +08:00
看完了,对新手确实有门槛
|
93
nannanziyu 2021-08-20 11:29:35 +08:00
@Jwyt
你觉得 #37 楼的方法麻不麻烦呢 |
94
skinny 2021-08-20 11:32:48 +08:00
|
95
x940727 2021-08-20 11:35:12 +08:00
一个 Java Python Go JavaScript 都稍微用过的,一直认为 HTTP 调用都是语言自带标准库就支持的,发现新天地了……
|
96
Jwyt 2021-08-20 11:36:51 +08:00
@nannanziyu
。。个人感觉也有点麻烦 你最开始的方法是 google,这个你得考虑墙,当然百度应该也是有的 你第二个 复制粘贴 的方法,我看了下一个是 Manage nuget packager,一个是 cpprestsdk 我都不知道是啥 当然我不是 c++开发,我也没有去尝试过,我的说法很片面 |
97
nannanziyu 2021-08-20 11:38:55 +08:00
@Jwyt
你看下#38 的视频…… |
98
OneMan 2021-08-20 11:39:20 +08:00
有人人真是钻进去了出不来,恼火,一看年龄,又能理解了,固化了
|
99
nannanziyu 2021-08-20 11:46:02 +08:00
@x940727
语言是工具,每种工具都有适合自己的地 Rust 也没有原生 http 库,C 也没有 语言各有优略,你说的这几门语言除了 golang,我都写过十几年,java 还是我的主吃饭语言 java 裹脚布 python 纸质书翻页需要游标卡尺 go 泛型都没有,1M 的源代码有 500k 的 if err != nil javascript 弱类型大型项目管理困难,ts 救了无数人的命 如果只说语言优劣,那除了 ts 和 c# 别的都没有意义了? 还是那句话,语言是工具,每种工具都有适合自己的地 |
100
nannanziyu 2021-08-20 11:46:56 +08:00
@OneMan
固化的不是你这种刻板印象的人嘛 |