1. curl 命令的使用

curl 不到任何参数的时候,就是一般的 get 请求。curl 的参数很多,我只列举常用的。

参数 -d

-d:用于发送 POST 请求的数据体。

$ curl -d'login=emma&password=123'-X POST https://google.com/login
# 或者
$ curl -d 'login=emma' -d 'password=123' -X POST  https://google.com/login

使用 -d 参数之后,HTTP 请求会自动加上标头 Content-Type : application/x-www-form-urlencoded。并且会自动将请求转为 POST 方法,因为可以省略 -X POST。 -d 参数甚至可以读取本地文件的数据,向服务器发送。

curl -d '@data.txt' http://google.com
参数 --data-urlencode

–data-urlencode 参数等同于 -d ,发送 POST 请求的数据体,区别在于会自动发送的数据进行URL编码

curl --data-urlencode 'comment=hello world 123' https://google.com/login

发送的数据 空格数字都会URL编码

参数 -H

-H 参数添加 HTTP 请求的标头

curl -H 'Accept-Language: en-US' https://google.com
curl -H 'Accept-Language: en-US' -H 'Secret-Message: xyzzy' https://google.com
参数 -o

-o 参数将服务器的回应保存成文件,等同于 wget 命令

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. 进入安装的目录  cd /usr/local
2. 下载curl源码     wget https://curl.haxx.se/download/curl-7.53.0.tar.gz
3. 解压curl包       tar -xzvf curl-7.53.0.tar.gz
4. 进入curl安装目录 cd /usr/local/curl-7.53.0
5. 编译安装             ./configure && make && make install
6. 检查是否安装成功  curl --version

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 的类

#ifndef COMM_HTTP_H
#define COMM_HTTP_H#include <vector>
#include <string>
#include <iostream>
#include <curl/curl.h>
#include <json/json.h>
#include <string.h>namespace COMM_HTTP{class Http{public:Http();~Http();static size_t WriteCallback(char *contents, size_t size, size_t nmemb, void *userp);bool HttpPostRequest(const std::string& HttpUrl,const std::string& HttpParam,std::string& HttpResponse,std::string& ErrMsg);private:CURL* curl;struct curl_slist* CurlHeaders;};COMM_HTTP::Http::Http(): curl(NULL),CurlHeaders(NULL){}COMM_HTTP::Http::~Http(){}size_t COMM_HTTP::Http::WriteCallback(char *contents, size_t size, size_t nmemb, void *userp) {((std::string*)userp)->append((char*)contents, size * nmemb);return size * nmemb;}bool COMM_HTTP::Http::HttpPostRequest(const std::string& HttpUrl,const std::string& HttpParam,std::string& HttpResponse,std::string& ErrMsg){/* In windows, this will init the winsock stuff */curl_global_init(CURL_GLOBAL_ALL);// for (std::vector<std::string>::const_iterator iter = HttpHeaders.begin();iter != HttpHeaders.end();iter++)// {//     CurlHeaders = curl_slist_append(CurlHeaders, iter->c_str());// }curl_slist_append(CurlHeaders, "Accept: application/json");curl_slist_append(CurlHeaders, "Content-Type: application/json");curl_slist_append(CurlHeaders, "charset: utf-8");curl = curl_easy_init();if (curl){curl_easy_setopt(curl, CURLOPT_HTTPHEADER, CurlHeaders);curl_easy_setopt(curl, CURLOPT_NOSIGNAL,1L);curl_easy_setopt(curl, CURLOPT_POST, 1L);curl_easy_setopt(curl, CURLOPT_URL, HttpUrl.c_str());curl_easy_setopt(curl, CURLOPT_POSTFIELDS, HttpParam.c_str());curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, Http::WriteCallback);curl_easy_setopt(curl, CURLOPT_WRITEDATA, &HttpResponse);CURLcode ResCode = curl_easy_perform(curl);if (ResCode != CURLE_OK){// std::cout << "curl_easy_perform failed, ResCode: " << ResCode << "," << curl_easy_strerror(ResCode) << std::endl;ErrMsg = "curl_easy_perform failed, msg: " + (std::string)curl_easy_strerror(ResCode);return false;}curl_easy_cleanup(curl);curl_slist_free_all(CurlHeaders);}else{// std::cout << "curl init failed!" << std::endl;ErrMsg = "curl_easy_init failed";return false;}curl_global_cleanup();return true;}}#endif //COMM_HTTP_H

函数 HttpPostRequest 可以向 Web 发送 POST 请求,并且接收 WEB 的响应,并且保存在 参数 HttpResponse 里面,最后 ErrMsg 是错误信息。

4. linux 使用 libcurl.a 在链接的时候报错

在编译的时候,发现加上 libcurl.a 后,编译报错,而且大多数是引用失败。

其实 libcurl 在链接的时候还需要依赖别的库,加上即可。

-lidn -lrt -lcrypto -lssl ./lib/libcurl.a

插言,后面有机会要剖析一下curl 的源码

curl命令及其API 的使用相关推荐

  1. 0353-如何使用curl命令调用CM的API动态配置Yarn资源池

    温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图. Fayson的github: https://github.com/fayson/cdhproject 提示 ...

  2. curl命令使用总结

    curl命令:用来发送http请求 -d:用来发送post请求,默认为get请求 content-type为multipart/form-data时,后面的多个参数用'&'连接,例如:&quo ...

  3. curl命令java_上curl java 模拟http请求

    最近,我的项目要求java模拟http请求,获得dns解决 tcp处理过的信息特定的连接. java api提供urlConnection apache提供的httpClient都不能胜任该需求,二次 ...

  4. cmd - 使用curl命令的注意点

    前言 最近在cmd中使用curl命令来测试rest api,发现有不少问题,这里记录一下. 在cmd中使用curl命令的注意事项 json不能由单引号包括起来 json数据里的双引号要用反斜杠\转义 ...

  5. ElasticSearch快速入门三(curl命令讲解)

    API测试工具_微博开放平台:https://open.weibo.com/tools/console# 感兴趣是可以使用这个工具玩一下restful接口调用,可以更形象的了解restful 下面我们 ...

  6. curl post https_Fiddler抓包13fiddler 抓包导出 curl 命令行

    前言 curl是一个命令行工具 ,一般用于 linux 环境上发 http 请求,方便远程定位接口问题. fiddler 抓包后可以导出 curl 命令行,这样方便不会写 curl 的小伙伴快速的生成 ...

  7. 21 个 curl 命令练习 | Linux 中国

    我认为使用 curl 构造 HTTP 请求也许就是这样的一项技能,所以这里有一些 curl 练习作为实验! -- Julia Evans 最近,我对人们如何学习新事物感兴趣.我正在读 Kathy Si ...

  8. linux 抓包文件 导出,Fiddler抓包13-fiddler 抓包导出 curl 命令行

    前言 curl是一个命令行工具 ,一般用于 linux 环境上发 http 请求,方便远程定位接口问题. fiddler 抓包后可以导出 curl 命令行,这样方便不会写 curl 的小伙伴快速的生成 ...

  9. 全网最详细中英文ChatGPT-GPT-4示例文档-从0到1快速入门AI智能问答应用场景——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)

    从0到1快速入门AI智能问答应用场景 Introduce 简介 setting 设置 Prompt 提示 Sample response 回复样本 API request 接口请求 python接口请 ...

  10. curl命令介绍与使用

    curl,全称CommandLine URL 或 CommandLine Uniform Resource Locator,顾名思义,curl命令是在命令行方式下工作,利用URL的语法进行数据的传输或 ...

最新文章

  1. php5.3.6安装教程,apache2.2.19+php5.3.6配置教程
  2. Tensorflow— saver_save
  3. 常用Shell脚本编写的内置变量
  4. 三国志战略版鸿蒙梦魇,三国志战略版:双控在手天下我有,洞察震慑枪已成吴国梦魇!...
  5. [ZJOI2010] 排列计数(dp + 组合数)
  6. python获取终端输出流_Linux下用Python获取命令行输出的几个方案
  7. ActiveRecord 模式杂谈
  8. Python分析pdf简历
  9. Python发送POST request payload形式的请求
  10. Python ln_虚拟机中单机Spark (Python版)安装
  11. Js 跨域CORS报错 Response for preflight has invalid HTTP status code 405
  12. 投简历:求求你给我个机会「小废物招聘全记录①」
  13. 操作系统概念 学习笔记
  14. 20145322何志威 《Java程序设计》第8周学习总结
  15. 双十一来临,你就不想知道阿里后台都做了哪些准备吗?
  16. 华为交换机5855设置ssh
  17. 2021年美容师(初级)免费试题及美容师(初级)考试试卷
  18. 【PTA 7-9】剥洋葱
  19. WindowsXP注册表详解
  20. 单片机c语言或运算,单片机avr c语言位运算 与或非 异或逻辑 运算介绍 详解

热门文章

  1. 给想去阿里面试的同学一些意见
  2. 计算机键盘的标点怎么打出来,电脑键盘上的标点符号怎么打(教你如何输入正确的标点符号)...
  3. 编程入门先学什么?零基础学什么好
  4. 卡内基梅隆大学计算机科学博士,2020年卡内基梅隆大学博士专业设置
  5. Python:实现simpson approx辛普森算法(附完整源码)
  6. Algorithm:矩阵中“块”的个数
  7. 110部值得一看的电影
  8. python实现税后工资_Python实现扣除个人税后的工资计算器示例
  9. 计算机如何安装无线网络适配器,无线网卡驱动怎么安装?电脑无线网卡驱动2种安装方法...
  10. Python词云_自定义图片做背景