一、换源
二、安装
1、软件源安装
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install curl
2、源码安装
*注释:如果需要openssl、zlib,则在编译curl之前,先要编译和安装openssl和zlib
下载curl源码,下载地址curl downloads
解压到选择目录//笔者解压到了/home/curl下
cd /home/curl
sudo chmod 777 ./configure
./configure --prefix --with-ssl=/usr/local/openssl
//--prefix=DIR 生成文件的输出目录
//--with-ssl=SSLDIR 指定使用的openssl目录
//--without-ssl 若无需ssl(https需要)支持,则不指定--with-ssl或指定--without-ssl
//--with-zlib=ZLIBDIR 指定使用的zlib目录
//--disable-shared 关闭编译动态库,即编译静态库
make
make install
cd DIR //进入安装位置
ls //此时应当能看见include、bin、lib和share文件夹
三、使用
cd ./bin
ls //可以看到curl、curl-config两个文件,curl就是使用的程序
./curl -V 查看curl版本
./curl -v <url> 打印更多信息,包括发送的请求信息
./curl -s <url> 减少输出的信息,比如进度
./curl -i <url> 显示html全部信息
./curl -l <url> 只显示<head>元素信息
./curl -I <url> 仅返回头部信息,使用HEAD请求
./curl -x <proxyhost[:port]> <url> 指定代理服务器地址和端口,端口默认为1080
./curl -m <seconds> <url> 指定处理的最大时长
./curl --connect-timeout <seconds> <url> 指定尝试连接的最大时长
./curl --retry <num> <url> 指定重试次数
//<url> = "http://xhqm.xyz/index.html"
1、GET请求
curl "http://xhqm.xyz/index.html",回车之后,HTML内容打印在屏幕上
curl "http://xhqm.xyz/index.html" -o FILE 将网页保存至文件 当URL指向文件时,则下载文件
curl "http://xhqm.xyz/index.html" > FILE 将网页保存至文件 当URL指向文件时,则下载文件
curl -T FILE <url> 上传文件
curl -T "{FILE1,FILE2}" <url> 上传多个文件
curl -T FILE ftp://ftp.xhqm.xyz/updata/ 上传多个文件到ftp服务器
2、PUT请求
3、POST请求
curl -d "op1=var1&op2=var2" <url/api> 需把请求的参数和URL分开,
curl -d "op1=var1" -d "op2=var2" <url/api> 提交两个参数。特殊字符需先转义
curl --data-urlencode "op1=var1" <url/api> 自动转义特殊字符
curl -F "filename=@/home/xhqm.txt" <url> 上传文件,不能漏掉@符号
4、DELETE请求
5、其他
curl -A "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36" <url> //伪装为Chrome浏览器
curl --cookie "op1=var1" <url> //使用cookie
curl -b /cookie.txt <url> //使用文件中的cookie
curl -c ./cookie.txt -d "user=admin" -d "pass=123456" <url> 保存生成的cookie到文件
curl -o /dev/null -s -w %{http_code} <url> 打印出返回的http码
curl -o /dev/null -s -w "time_total: %{time_total}\n" <url> 打印响应时间
四、curl库的使用
1、环境配置
#define USE_OPENSSL //是否使用openssl
#define CURL_STATICLIB //是否使用静态库
#include "curl/curl.h" //curl头文件
#pragma comment(lib,"libcurl.lib") //引入curl的lib库
//使用openssl时,需要引入以下lib库
//当在Windows下时,需要引入以下lib库
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"crypt32.lib")
#pragma comment(lib,"wldap32.lib")
//使用openssl动态库时
#pragma comment(lib,"openssl/lib/libssl.lib")
#pragma comment(lib,"openssl/lib/libcrypto.lib")
//使用openssl静态库时
#pragma comment(lib,"openssl/lib/libssl_static.lib")
#pragma comment(lib,"openssl/lib/libcrypto_static.lib")
*注意#pragma comment在Ubuntu下应当不支持,注意配置环境的方式
2、API说明
curl_global_init(CURL_GLOBAL_ALL); //初始化curl,一个程序调用一次即可
curl_global_cleanup(); //结束curl使用,一个程序调用一次即可
//CURL_GLOBAL_NOTHING 不初始化
//CURL_GLOBAL_SSL 初始化SSL支持
//CURL_GLOBAL_WIN32 初始化WIN平台,//仅win下生效
//CURL_GLOBAL_ALL 初始化全部 //建议
CURL* curlptr = curl_easy_init(); //初始化一个curl句柄
curl_easy_cleanup(curlptr); //关闭curl句柄
curl_slist* headers = nullptr;//头信息句柄
curl_slist_append(headers, const char*);//增加一条头
curl_slist_free_all(headers);//释放头信息句柄
CURLcode res = curl_easy_setopt(curlptr, CURLoption option, void *);//设置各项参数
curl_easy_setopt(curlptr, CURLOPT_URL, const char*url);//示例 设置url
//CURLOPT_PORT, int //设置端口号
//CURLOPT_FOLLOWLOCATION, bool //设置自动跳转
//CURLOPT_POSTFIELDS, const char* //设置post上交的数据
//CURLOPT_CUSTOMREQUEST, const char* //设置请求类型 "GET" "PUT" "POST" "DELETE"
//CURLOPT_SSL_VERIFYPEER, bool //是否跳过证书检查
//CURLOPT_SSL_VERIFYHOST, bool //检查SSL加密算法是否存在
//CURLOPT_CONNECTTIMEOUT, long long //设置连接超时时间
//CURLOPT_TIMEOUT, long long //设置写入超时时间
//CURLOPT_HEADER, bool //是否返回头信息
//CURLOPT_NOBODY, bool //是否不返回体信息
//CURLOPT_NOSIGNAL, bool //
//CURLOPT_VERBOSE, bool //
//typedef long long(CURL_CallBackW)(void*, long long, long long, void*);
//CURLOPT_WRITEFUNCTION, CURL_CallBackW* //写入回调函数 连接结束时
//CURLOPT_WRITEDATA, void* //传入写入回调函数的数据
//typedef long long(CURL_CallBackR)(void*, long long, long long, void*);
//CURLOPT_READFUNCTION, CURL_CallBackR* //读取回调函数 连接开始时
//CURLOPT_RRITEDATA, void* //传入读取回调函数的数据
CURLcode res = curl_easy_perform(curlptr);//进行一次连接
//返回值 错误码
//CURLE_OK = 0 //成功
//其余返回值看curl代码
3、代码示例
#define USE_OPENSSL //是否使用openssl
#define CURL_STATICLIB //是否使用静态库
#include "curl/curl.h" //curl头文件
#pragma comment(lib,"libcurl.lib") //引入curl的lib库
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"crypt32.lib")
#pragma comment(lib,"wldap32.lib")
#pragma comment(lib,"openssl/lib/libssl_static.lib")
#pragma comment(lib,"openssl/lib/libcrypto_static.lib")
int main()
{
curl_global_init(CURL_GLOBAL_ALL); //初始化curl,一个程序调用一次即可
CURL *curl = curl_easy_init(); //初始化一个curl句柄
if(curl)
{
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Content-Type: text/plain");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
const char *data = "{\"boxLocal\":\"string\",\"flatness\":0}";
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
curl_easy_setopt(curl, CURLOPT_URL, "http://xhqm.xyz");
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, true);
curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
CURLcode res = curl_easy_perform(curl);
}
curl_easy_cleanup(curl); //关闭curl句柄
curl_global_cleanup(); //结束curl使用,一个程序调用一次即可
return 0;
}
————星辉20220902
Comments NOTHING