Curl命令行使用

标签: Curl 分类: 操作系统 创建时间:2019-09-25 05:42:44 更新时间:2024-11-15 10:49:43

curl是一个非常强大的工具

1.安装

如果没有安装的话,在Ubuntu中使用:sudo apt-get install curl,即可安装。

2.常用命令

1
2
3
4
5
## 分别测试不同的方法
curl -X GET "http://www.rest.com/api/users"
curl -X POST "http://www.rest.com/api/users"
curl -X PUT "http://www.rest.com/api/users"
curl -X DELETE "http://www.rest.com/api/users"

3.将获取到的内容保存为文件

主要使用linux提供的重定向符: >> 后面输入一个文件名就可以了。

1
curl "http://www.baidu.com"  -X POST -i -H "Content-Type:text/plain" -d '{"key":"value"}' >> test.txt 

4.针对gzip内容进行解压缩

当我请求一个gzip内容的网页时返回的响应头中会出现: Content-Encoding: gzip,这个使用应该先解压缩,使用: curl –compressed url,然后如果还是乱码,需要添加:iconv -f gb2312 -t utf-8,可以将gb2312的网页转换成utf-8的网页

1
2
curl --compressed "url"  -X POST -i -H "Content-Type:text/plain" -d 'json字符串' | iconv -f gb2312 -t utf-8

我在刚开始的时候,直接使用iconv进行转换,总是出现:

而是用gunzip进行解压也会报错:

5.bash – 如何在使用curl时正确处理gzip压缩的网页?:https://codeday.me/bug/20170704/35980.html
6.终端使用curl请求url时返回乱码的解决:https://blog.csdn.net/benben0729/article/details/80882553 (这篇文章中提供了两个步骤解决乱码的问题,第一个就是解压,第二个才是iconv,但是我用第一种解压方法,即使用gungzip没有用,报错了,所以改用–compressed即可)
7.curl请求GB2312网页乱码解决:https://blog.yinghualuo.cn/archives/750/curl%E8%AF%B7%E6%B1%82gb2312%E7%BD%91%E9%A1%B5%E4%B9%B1%E7%A0%81%E8%A7%A3%E5%86%B3/
8.shell中使用curl时,数据为乱码的解决方法,以及一些参数的解释:https://blog.csdn.net/zhangyuan12805/article/details/78043203

5.”the installed libcurl version doesn’t support this”

在解压缩–compressed时,出现了 “the installed libcurl version doesn’t support this”,在另一台机器上却可以

而且使用:curl -h,显示却有这个–compressed命令。

真是让人头大。
尝试了很多方式,升级curl,还是没有解决。奇了怪了,一个版本是curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0(这个版本可以使用–compressed参数),另一台服务器的版本是:curl 7.61.1 (x86_64-pc-linux-gnu) libcurl/7.61.1 OpenSSL/1.1.1c (这个高版本的反而不支持–compressed)

问题是没人遇到过这个问题,真是醉了。

在这里:https://curl.haxx.se/mail/archive-2013-02/0008.html 说,这是正常的,因为所有的help都一样,无论底层的libcurl是什么版本。

结果,我尝试了卸载curl然后重新安装最新版本的curl

卸载其实说麻烦也麻烦,说不麻烦也不麻烦,只要找到安装路径,然后删除文件就可以了,但是我总觉得不对,使用 man 命令的时候,如何查找到安装的软件呢?还没弄明白,干脆就重新下载编译安装,覆盖原文件就好了。编译安装倒是挺简单的,将下载的tar.gz压缩包,使用;tar -zvxf finame,解压后,进入到解压目录,依此执行下面的命令就好了。

1
2
3
4
$ sudo ./configure
$ sudo make
$ sudo make test (optional)
$ sudo make install

安装的时候,可以使用:“make >& LOG_make &”和“make install >& LOG_install &” ,保存安装目日志(注意命令输入完成后,要按两次确认键才能执行安装),最后安装成功。

结果,还是不支持–compressed,只能说高版本的不支持compressed选项了。我尝试使用低版本的试试,因为我在另一台服务器上安装了7.29.0版本,是有这个选项的,所以我尝试下载安装curl 7.29.0版本试试。

结果还是失败了,还是不支持–compressed选项
但是我重新查看参考文章,发现了两个相同版本的curl,但是在Features选项中,却不一样,一个有libz,一个没有libz

没有libz:

参考文章:
1.Linux环境下curl安装和移植:https://blog.csdn.net/zqj6893/article/details/35569405
2.Curl Compressed Command not Recognized in Windows:https://superuser.com/questions/497310/curl-compressed-command-not-recognized-in-windows (这里说了在windows上不支持–compressed选项的解决方式)
3.linux下编译安装curl:https://www.cnblogs.com/fnlingnzb-learner/p/6743383.html

黄天不负有心人(我都不知道我花了两天时间研究这个干啥),最后我终于成功了。
根据两个版本特征的对比,我知道了不能使用–compressed选项的版本是确实了libz,我顺便搜了一下libz是干啥的。libz是一个提供函数压缩的函数库,需要安装zlib安装包。我有通过./configure -h,发现了在安装curl时有个–with-zlib选项,如果指定了这个路径,然后重新编译和安装,最后就可以了,先上一张截图。

1
2
3
4
5
6
7
8
9
10
11
12
13
## 安装zlib
sudo apt-get install zlib1g
sudo apt-get install zlib1g.dev
## 查找zlib安装目录
dpkg -L zlib1g
## 查看编译选项
sudo ./configure -h
## 指定编译选项
sudo ./configure --with-zlib=/lib/x86_64-linux-gnu/
## 编译
sudo make
## 重新安装
sudo make install

指定curl编译选项:

查找zlib安装路径:

大功告成,大功告成,大功告成

参考文章:
1.ubuntu如何安装libz库:https://blog.csdn.net/yuhengyue/article/details/78131758
2.ubuntu下安装zlib的方法:https://blog.csdn.net/wu_cai_/article/details/80278611
3.apt-get下载、安装的软件在哪里: https://blog.csdn.net/m0_37407756/article/details/77247689
4.Ubuntu安装zlib和zlib-devel: https://blog.csdn.net/the_wish/article/details/52057921
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。