Windows 一分钟使用 C++ 发送 Http 请求 - V2EX
2021-08-20 18:04:32 Author: jp.v2ex.com(查看原文) 阅读量:63 收藏

有人说 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;
}

全程录屏:

SEO Area:
C++ 发 http 请求
Cpp 发 http 请求
怎么用 Cpp 发 http 请求
http 请求 cpp
http 请求 c++

第 1 条附言  ·  4 小时 16 分钟前

顺便发一下 Mac 下简单发送 Http 请求的方法 简单的方法有很多,比如 brew install openssl ,然后使用 cpp-httplib 提供一个 vcpkg 的方法: 流程就是

  1. 通过 clone 下载 vcpkg
  2. run vcpkg install cpprestsdk:x64-osx 来build cpprestsdk
  3. 生成代码,run g++ 来 build

生成一个 shell 脚本,直接run 就好

#!/bin/sh
git clone https://github.com/microsoft/vcpkg.git
./vcpkg/bootstrap-vcpkg.sh
./vcpkg/vcpkg install x64-osx
rm -rf ./httptest
mkdir httptest
cd httptest
echo '#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::cout << rsp.status_code() << "\\n" << body << std::endl;
}' > main.cpp

 g++  main.cpp -o main -std=c++17 \
 -I../vcpkg/installed/x64-osx/include \
 -framework Security\
 -framework AppKit\
 -L../vcpkg/installed/x64-osx/lib \
 -lcpprest\
 -lssl\
 -lcrypto

 ./main

alt

36 条回复    2021-08-20 17:59:29 +08:00

zakokun

1

zakokun   5 小时 38 分钟前   ❤️ 2

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

Jwyt

2

Jwyt   5 小时 33 分钟前 via Android

@zakokun 我记得 vs 社区版的已经免费很久了吧。。

nannanziyu

3

nannanziyu   5 小时 31 分钟前

@zakokun
我尽量心平气和哈
1. vs 这东西好几 G,安装要激活码的,我从哪里弄
VS 社区版 14 年就免费了,距今已经 7 年
2. 看到 web::http::client::http_client clien 这么长一串我就笑出来了
namespace 的概念,我都不知道怎么跟你解释
没有域隔离,就会变得像 Objc 一样,类名变得冗长无比
最后,要争执,去隔壁贴争执吧,这贴我只是备份方便后人搜索的
然后多少有点基础知识再争执吧,我真的不知道怎么跟你说

xarthur

4

xarthur   5 小时 24 分钟前   ❤️ 8

从原帖看到这个帖子,觉得是楼主着急了……

nannanziyu

6

nannanziyu   4 小时 58 分钟前

@xarthur
剧场版《打滚》
A:C++ 发送 http 请求太麻烦了
B:不麻烦啊,简单搜索几分钟就有答案了,如图如图
A:要搜索还不麻烦,靠搜索什么需求都完成了。只有直接复制粘贴的答案才是不麻烦
B:好吧,再给你一个直接复制粘贴的答案,一分钟就能完成,如图如图如视频
A:擦,B,你急了
B:……

singerll

7

singerll   4 小时 27 分钟前 via Android

非程序员,会写几行 python 和 shell 。我看了只能说,确实比 python 和 shell 门槛高。隔壁销售不懂啥是内存,啥是接口,也会写两行 python,但我觉得写不了 cpp

litmxs

8

litmxs   4 小时 16 分钟前 via Android

上个帖子别人说了句 C++门槛高,就被楼主喷无知
我看楼主只是想通过贬低别人找点儿优越感罢了

darknoll

9

darknoll   4 小时 12 分钟前

楼主应该是个老 windows 程序员吧,咋说呢,c++这玩意确实跟不上时代了,唯一的优势是运行效率高,但是现在都是 web 了,速度瓶颈在于带宽。可能很多老 c++开发人员确实都比较自负,认为自己能力远超常人,但是我反而觉得我司 c++大佬很多新技术都不懂,眼界太窄了。还是得紧跟时代啊。

nannanziyu

11

nannanziyu   4 小时 7 分钟前

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

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

wangchengwu

12

wangchengwu   4 小时 6 分钟前

cpprestsdk 这东西是微软弄得,嵌入式移植不动。

nannanziyu

15

nannanziyu   3 小时 56 分钟前   ❤️ 1

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

nannanziyu

16

nannanziyu   3 小时 53 分钟前

@darknoll
在一个谁都不认识谁的论坛有什么好秀的
当年安利 UWP,也是好多人说我秀,“年入两百万了不起啊”
我当时只是希望更多人做,把市场做大,自己收入更多一些而已
我要秀,我去找个妹子秀不好嘛……
这次更是,用 c++发个 http'请求有什么好秀的啊
我只是想说“用 c++发个 http 请求并不麻烦”啊

xylxAdai

17

xylxAdai   3 小时 47 分钟前   ❤️ 1

怎么说呢,对一个新手来说,确实难,我用 c++四五年了,但是还是觉得相比于其他语言来说,就算拿不算简单的 java 来说,c++的包引入都复杂了一个级别。
你能找到这个,是因为你和我一样对 c++太熟悉了,对一个 c++新手来说,这些过程是很难找到或者实践的。

abersheeran

18

abersheeran   3 小时 33 分钟前

作为一个只在学校里写过 C++ 的人来说句我的感受,C++对于我来说最大的困难是没有一个好用的包管理器以及简单易用的编译工具。所以我在入门阶段就直接放弃了,现在大抵是只能在 VS 、DevC 里写点代码来解决 leetcode 上的题目这个水平。

我说一下我觉得好用的包管理器,比如 npm 、cargo 这种。简单易用的编译工具,go build 、cargo build 。

包管理器不是有就行的,比如 Python 那个 pip 我就觉得相当一般,最近他们整了个新活,无限尝试下载 package 搞得我 CD 都废了。编译工具也不是能用就行的,cargo 和 make 一比就知道谁优谁劣了。

ZField

19

ZField   3 小时 31 分钟前

为啥不直接用 curl 发送请求?

pocarisweat

21

pocarisweat   3 小时 26 分钟前

其实要是今天写一个新的 Cpp 库,直接面向 C++20 就行。因为那些用旧版编译器的肯定已经有自己接入的那堆库了。然后接入到各种 Cpp 包管理器里。
其实 C++包管理器这件事,这些年来一直有人在搞。流行不起来的原因还是用 Cpp 开新项目的太少了。

mrsecond

22

mrsecond   2 小时 32 分钟前

单纯提问,(本人在校软工研究生)。我想问下楼主学 Cpp 还有前途嘛,感觉好多人都在唱衰 Cpp,本人对 Go 和 Cpp 都挺感兴趣的,Cpp 和 Qt 学的稍微深入一点。有点担心到时候 Cpp 的工作岗位越来越少

nannanziyu

23

nannanziyu   1 小时 36 分钟前   ❤️ 1

@mrsecond
个人意见,仅供参考哈
先列列现在行业的语言可选项:
现在移动客户端平台饱和,所以移动客户端限定语言 Objc Swift 之类的可以暂时排除(
桌面客户端现在都在往跨平台方向走,虽然人人讨厌 electron,但是桌面客户端目前就是 QT or Electron (MAUI 前景不明)
后端前景一直不错,五大主流语言 java go python node.js PHP 外加 dotnetcore,找工作的话,我国其实通常就是 Java 和 go
前端三大框架+ Svelte,Emberjs,但我国找工作其实就是 Vue

其实游戏后端和交易平台撮合引擎都是用 CPP,但是刚毕业肯定做不了,不考虑;游戏客户端也可以排除; AI 也排除
另外目前因为直播行业火,所以音视频开发火爆,薪水开的非常高,这个是 C++领域,不过音视频要的相关知识储备多,刚毕业也可以排除

所以个人意见,仅供参考哈
目前 nodeJS 相关的技术里,网页前端不说了,后端可以做,客户端 Electron 也可以做
如果你没有其他基础,学 nodeJS+Vue,短时间用来找工作比较合适
之后学一门脚本语言,shell /powershell /python
Qt 的话,说实话,QML 几乎没看到有工作需求,QWidget 的话有,但工作范围还是有点少。
个人意见,仅供参考哈

0o0o0o0

24

0o0o0o0   1 小时 30 分钟前

1.语法比较复杂,即时复制粘贴,也是需要读懂和使用的,否则也没有意义。
2.没有内置库或者官方库,虽然有很多高 star 的库,但是仍然是比具有官方库的语言来说麻烦。
这是让人觉得麻烦的主要原因。

其次是“麻烦”不等于“不会”。

就像大数乘法,c++和其他语言都可以实现,但是用 python 就是更方便。

就像洗碗麻烦吗,对于有些人来说麻烦,对于有些人来说不麻烦,麻烦的就去使用洗碗机,或者忍着麻烦去洗碗,觉得不麻烦就开开心心洗碗。

最后麻烦不是贬义,只是每种语言所擅长的事情不同。

就像用 c++去开发 web,可以吗,可以,麻烦吗,对于大部分人来说就是很麻烦呀。

nicevar

25

nicevar   1 小时 19 分钟前

有些人就是这样,喜欢胡搅蛮缠,连装个 vs 都要怪到 c++头上,这是什么逻辑,nodejs 那套玩得不比 c++还麻烦?

nannanziyu

26

nannanziyu   1 小时 11 分钟前

@nicevar
> 有些人就是这样,喜欢胡搅蛮缠,连装个 vs 都要怪到 c++头上,这是什么逻辑,nodejs 那套玩得不比 c++还麻烦?

是呀,也是无语
1. 关键是人能力差,自尊心还超级强,说一句“多思考下”,就是侮辱他们了
2. 给出搜索思路,不行,麻烦,要直接复制粘贴的答案;给出直接复制粘贴三行的代码,不行,我看不懂不算。大数乘法 cpp 就是比 python 麻烦。 我又没说大数乘法,我说的是“发个简单的 http 请求”不麻烦
3. 然后说你只会 c++,古董程序员,被时代淘汰了;给出擅长其他语言的证据以后,又,秀,秀什么秀
真是无语

yolee599

27

yolee599   57 分钟前

很多人觉得现在流行的是 web,但是那玩意文件又大又吃配置,运行还不稳定。我是不喜欢

nmap

28

nmap   52 分钟前

UWP 是什么?

leitwolf

31

leitwolf   49 分钟前 via Android

我光看那些符号都头大了

lakehylia

32

lakehylia   47 分钟前

相对于 http,我觉得 c++的二进制管理相当的烦。尤其是 stl,版本对不上就编译不通过,编译通过了,跑起来就各种崩。。。烦


文章来源: https://jp.v2ex.com/t/796981#reply36
如有侵权请联系:admin#unsafe.sh