curl 的命令使用和API 使用
问题:curl 不支持 https(Protocol https not supported or disabled in libcurl)
https://silence-linhl.github.io/blog/2019/10/21/prob1/
https://curl.haxx.se/docs/faq.html#configure_doesn_t_find_OpenSSL_e
https://curl.haxx.se/docs/install.html
https://www.ruanyifeng.com/blog/2019/09/curl-reference.html
linux c++ 使用libcurl 访问http 编程
https://blog.csdn.net/wcc27857285/article/details/86529034
https://www.cnblogs.com/bugutian/p/4868167.html
https://stackoverflow.com/questions/11973994/json-requests-in-c-using-libcurl/12938692#12938692
curl 的get 请求的参数拼接要加转义fu hao
windows 平台 使用curl 发送get 请求携带多个参数正确命令:
curl -s “http://localhost:8080/get?name=zhangsan&age=12&sex=1“
linux 平台 使用curl 发送get 请求携带多个参数正确命令:
curl http://localhost:8080/get?name=zhangsan&age=12&sex=1
1. curl 命令的使用
curl 不到任何参数的时候,就是一般的 get 请求。curl 的参数很多,我只列举常用的。
参数 -d
-d:用于发送 POST 请求的数据体。
1 | $ curl -d'login=emma&password=123'-X POST https://google.com/login |
使用 -d 参数之后,HTTP 请求会自动加上标头 Content-Type : application/x-www-form-urlencoded。并且会自动将请求转为 POST 方法,因为可以省略 -X POST。 -d 参数甚至可以读取本地文件的数据,向服务器发送。
1 | curl -d '@data.txt' http://google.com |
参数 –data-urlencode
–data-urlencode 参数等同于 -d ,发送 POST 请求的数据体,区别在于会自动发送的数据进行URL编码
1 | curl --data-urlencode 'comment=hello world 123' https://google.com/login |
发送的数据 空格数字都会URL编码
参数 -H
-H 参数添加 HTTP 请求的标头
1 | curl -H 'Accept-Language: en-US' https://google.com |
参数 -o
-o 参数将服务器的回应保存成文件,等同于 wget 命令
1 | curl -o tmp.html https://www.tmp.com |
将 www.tmp.com 保存成 tmp.log 文件
更多有用的curl 参数参考:https://catonmat.net/cookbooks/curl
2. libcurl 库的安装
curl 命令底层使用的就是 libcurl 库。因此如果要使用代码来解决 使用curl 的场景,如发送web 请求。这是就要用到 libcurl 库
1 | 1. 进入安装的目录 cd /usr/local |
libcurl 库的头文件,检查一下是否在 /usr/local/include/curl 下了,或者 /usr/include/curl 下了。否则将其添加到库链接目录中
检查一下 libcurl.so 或者 libcurl.a 文件是否存在与 /usr/local/lib 或者 /usr/lib 下了,没有的话就手动放一下。
在 /usr/local/curl-7.53.0/docs/example 下,可以看到 libcurl 的示例代码,还有 README 文件。可以学习一下。
3. libcurl 库的使用
我自己简单的使用 API 封装了一个使用 libcurl 的类
1 | #ifndef COMM_HTTP_H |
函数 HttpPostRequest 可以向 Web 发送 POST 请求,并且接收 WEB 的响应,并且保存在 参数 HttpResponse 里面,最后 ErrMsg 是错误信息。
4. linux 使用 libcurl.a 在链接的时候报错
在编译的时候,发现加上 libcurl.a 后,编译报错,而且大多数是引用失败。
其实 libcurl 在链接的时候还需要依赖别的库,加上即可。
1 | -lidn -lrt -lcrypto -lssl ./lib/libcurl.a |
插言,后面有机会要剖析一下curl 的源码