日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

Linux curl 常用示例你都 Get 了嗎?| CSDN 博文精選

作者 | LightZhang666

責編 | 屠敏

出品 | CSDN 博客

本篇文章包含了curl的常用案例使用。

1.常見網頁訪問示例

基本用法

訪問一個網頁:


 

curl https://www.baidu.com

執行后,相關的網頁信息會打印出來。

進度條展示

有時候我們不需要進度表展示,而需要進度條展示。比如:下載文件時。

可以通過 -#, --progress-bar 選項實現。

[root@iZ28xbsfvc4Z 20190713]# curl https://www.baidu.com | head -n1 # 進度表顯示
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2443 100 2443 0 0 11662 0 --:--:-- --:--:-- --:--:-- 11688
<!DOCTYPE html>
[root@iZ28xbsfvc4Z 20190713]# curl -# https://www.baidu.com | head -n1 # 進度條顯示
######################################################################## 100.0%
<!DOCTYPE html>

靜默模式與錯誤信息打印

當我們做一些操作時,可能會出現進度表。這時我們可以使用 -s, --silent 靜默模式去掉這些不必要的信息。

如果使用 -s, --silent 時,還需要打印錯誤信息,那么還需要使用 -S, --show-error 選項。

靜默模式示例

[root@iZ28xbsfvc4Z ~]# curl https://www.baidu.com | head -n1
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2443 100 2443 0 0 11874 0 --:--:-- --:--:-- --:--:-- 11859
<!DOCTYPE html>
[root@iZ28xbsfvc4Z ~]# curl -s https://www.baidu.com | head -n1
<!DOCTYPE html>

靜默模式結合錯誤信息打印

[root@iZ28xbsfvc4Z 20190713]# curl -s https://140.205.16.113/ 
[root@iZ28xbsfvc4Z 20190713]#
[root@iZ28xbsfvc4Z 20190713]# curl -sS https://140.205.16.113/
curl: (51) Unable to communicate securely with peer: requested domain name does not match the server's certificate.

顯示詳細操作信息

使用 -v, --verbose 選項實現。

以 > 開頭的行表示curl發送的"header data";< 表示curl接收到的通常情況下隱藏的"header data";而以 * 開頭的行表示curl提供的附加信息。

[root@iZ28xbsfvc4Z 20190712]# curl -v https://www.baidu.com
* About to connect to www.baidu.com port 443 (#0)
* Trying 180.101.49.12...
* Connected to www.baidu.com (180.101.49.12) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate:
* subject: CN=baidu.com,O="Beijing Baidu Netcom Science Technology Co., Ltd",OU=service operation department,L=beijing,ST=beijing,C=CN
* start date: May 09 01:22:02 2019 GMT
* expire date: Jun 25 05:31:02 2020 GMT
* common name: baidu.com
* issuer: CN=GlobalSign Organization Validation CA - SHA256 - G2,O=GlobalSign nv-sa,C=BE
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: www.baidu.com
> Accept: */*
>
< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Connection: Keep-Alive
< Content-Length: 2443
< Content-Type: text/html
< Date: Fri, 12 Jul 2019 08:26:23 GMT
< Etag: "588603eb-98b"
< Last-Modified: Mon, 23 Jan 2017 13:23:55 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
<
<!DOCTYPE html>
……………… # curl 網頁的具體信息

指定訪問的請求方法

當然curl默認使用GET方式訪問。使用了 -d, --data <data> 選項,那么會默認為 POST方法訪問。如果此時還想實現 GET 訪問,那么可以使用 -G, --get 選項強制curl 使用GET方法訪問。

同時 -X, --request <command> 選項也可以指定訪問方法。

POST請求和數據傳輸

為了抓包查看信息所以使用了 --local-port <num>[-num] 選項,在實際應用中不需要該選項。

[root@iZ28xbsfvc4Z ~]# curl -sv --local-port 9000 -X POST -d 'user=zhang&pwd=123456' http://www.zhangblog.com/2019/06/24/domainexpire/ | head -n1 
## 或者
[root@iZ28xbsfvc4Z ~]# curl -sv --local-port 9000 -d 'user=zhang&pwd=123456' http://www.zhangblog.com/2019/06/24/domainexpire/ | head -n1
* About to connect to www.zhangblog.com port 80 (#0)
* Trying 120.27.48.179...
* Connected to www.zhangblog.com (120.27.48.179) port 80 (#0)
> POST /2019/06/24/domainexpire/ HTTP/1.1 # POST 請求方法
> User-Agent: curl/7.29.0
> Host: www.zhangblog.com
> Accept: */*
> Content-Length: 21
> Content-Type: Application/x-www-form-urlencoded
>
} [data not shown]
* upload completely sent off: 21 out of 21 bytes
< HTTP/1.1 405 Not Allowed
< Server: Nginx/1.14.2
< Date: Thu, 18 Jul 2019 07:56:23 GMT
< Content-Type: text/html
< Content-Length: 173
< Connection: keep-alive
<
{ [data not shown]
* Connection #0 to host www.zhangblog.com left intact
<html>

抓包信息

[root@iZ28xbsfvc4Z tcpdump]# tcpdump -i any port 9000 -A -s 0
Linux curl 常用示例你都 Get 了嗎?| CSDN 博文精選

指定請求方法

curl -vs -X POST https://www.baidu.com | head -n1
Linux curl 常用示例你都 Get 了嗎?| CSDN 博文精選
curl -vs -X PUT https://www.baidu.com | head -n1
Linux curl 常用示例你都 Get 了嗎?| CSDN 博文精選

保存訪問網頁

使用linux的重定向功能保存


 

curl www.baidu.com >> baidu.html

使用curl的大O選項

通過 -O, --remote-name 選項實現。

[root@iZ28xbsfvc4Z 20190712]# curl -O https://www.baidu.com # 使用了 -O 選項,必須指定到具體的文件 錯誤使用
curl: Remote file name has no length!
curl: try 'curl --help' or 'curl --manual' for more information
[root@iZ28xbsfvc4Z 20190712]# curl -O https://www.baidu.com/index.html # 使用了 -O 選項,必須指定到具體的文件 正確使用
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2443 100 2443 0 0 13289 0 --:--:-- --:--:-- --:--:-- 13349

使用curl的小o選項

通過 -o, --output <file> 選項實現。

[root@iZ28xbsfvc4Z 20190713]# curl -o sina.txt https://www.sina.com.cn/ # 單個操作
[root@iZ28xbsfvc4Z 20190713]# ll
-rw-r--r-- 1 root root 154 Jul 13 21:06 sina.txt
[root@iZ28xbsfvc4Z 20190703]# curl "http://www.{baidu,douban}.com" -o "site_#1.txt" # 批量操作,注意curl 的地址需要用引號括起來
[1/2]: http://www.baidu.com --> site_baidu.txt
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2381 100 2381 0 0 46045 0 --:--:-- --:--:-- --:--:-- 46686

[2/2]: http://www.douban.com --> site_douban.txt
100 162 100 162 0 0 3173 0 --:--:-- --:--:-- --:--:-- 3173
[root@iZ28xbsfvc4Z 20190703]#
[root@iZ28xbsfvc4Z 20190703]# ll
total 220
-rw-r--r-- 1 root root 2381 Jul 4 16:53 site_baidu.txt
-rw-r--r-- 1 root root 162 Jul 4 16:53 site_douban.txt

允許不安全訪問

當我們使用curl進行https訪問訪問時,如果SSL證書是我們自簽發的證書,那么這個時候需要使用 -k, --insecure 選項,允許不安全的訪問。

[root@iZ28xbsfvc4Z ~]# curl https://140.205.16.113/ # 被拒絕
curl: (51) Unable to communicate securely with peer: requested domain name does not match the server's certificate.
[root@iZ28xbsfvc4Z ~]#
[root@iZ28xbsfvc4Z ~]# curl -k https://140.205.16.113/ # 允許執行不安全的證書連接
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<h1>403 Forbidden</h1>
<p>You don't have permission to access the URL on this server.<hr/>Powered by Tengine</body>
</html>

獲取HTTP響應狀態碼

在腳本中,這是很常見的測試網站是否正常的用法。

通過 -w, --write-out <format> 選項實現。

[root@iZ28xbsfvc4Z 20190713]# curl -o /dev/ -s -w %{http_code} https://baidu.com
302[root@iZ28xbsfvc4Z 20190713]#
[root@iZ28xbsfvc4Z 20190713]#
[root@iZ28xbsfvc4Z 20190713]# curl -o /dev/ -s -w %{http_code} https://www.baidu.com
200[root@iZ28xbsfvc4Z 20190713]#

指定proxy服務器以及其端口

很多時候上網需要用到代理服務器(比如是使用代理服務器上網或者因為使用curl別人網站而被別人屏蔽IP地址的時候),幸運的是curl通過使用 -x, --proxy <[protocol://][user:password@]proxyhost[:port]> 選項來支持設置代理。


 

curl -x 192.168.100.100:1080 https://www.baidu.com

模仿瀏覽器訪問

有些網站需要使用特定的瀏覽器去訪問他們,有些還需要使用某些特定的瀏覽器版本。我們可以通過 -A, --user-agent <agent string> 或者 -H, --header <header> 選項實現模擬瀏覽器訪問。

curl -A "Mozilla/5.0 (windows NT 10.0; Win64; x64) Chrome/75.0.3770.999" http://www.zhangblog.com/2019/06/24/domainexpire/ 
或者
curl -H 'User-Agent: Mozilla/5.0' http://www.zhangblog.com/2019/06/24/domainexpire/

偽造referer(盜鏈)

有些網站的網頁對http訪問的鏈接來源做了訪問限制,這些限制幾乎都是通過referer來實現的。

比如:要求是先訪問首頁,然后再訪問首頁中的郵箱頁面,這時訪問郵箱的referer地址就是訪問首頁成功后的頁面地址。如果服務器發現對郵箱頁面訪問的referer地址不是首頁的地址,就斷定那是個盜連了。

可以通過 -e, --referer 或則 -H, --header <header> 實現偽造 referer 。

curl -e 'https://www.baidu.com' http://www.zhangblog.com/2019/06/24/domainexpire/
或者
curl -H 'Referer: https://www.baidu.com' http://www.zhangblog.com/2019/06/24/domainexpire/

構造HTTP請求頭

可以通過 -H, --header <header> 實現構造http請求頭。


 

curl -H 'Connection: keep-alive' -H 'Referer: https://sina.com.cn' -H 'User-Agent: Mozilla/1.0' http://www.zhangblog.com/2019/06/24/domainexpire/

保存響應頭信息

可以通過 -D, --dump-header <file> 選項實現。

[root@iZ28xbsfvc4Z 20190703]# curl -D baidu_header.info www.baidu.com 
………………
[root@iZ28xbsfvc4Z 20190703]# ll
total 4
-rw-r--r-- 1 root root 400 Jul 3 10:11 baidu_header.info # 生成的頭文件

限時訪問

--connect-timeout <seconds> 連接服務端的超時時間。這只限制了連接階段,一旦curl連接了此選項就不再使用了。

# 當前 https://www.zhangXX.com 是國外服務器,訪問受限
[root@iZ28xbsfvc4Z ~]# curl --connect-timeout 10 https://www.zhangXX.com | head
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:10 --:--:-- 0
curl: (28) Connection timed out after 10001 milliseconds

-m, --max-time <seconds> 允許整個操作花費的最大時間(以秒為單位)。這對于防止由于網絡或鏈接變慢而導致批處理作業掛起數小時非常有用。

[root@iZ28xbsfvc4Z ~]# curl -m 10 --limit-rate 5 http://www.baidu.com/ | head # 超過10秒后,斷開連接
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
2 2381 2 50 0 0 4 0 0:09:55 0:00:10 0:09:45 4
curl: (28) Operation timed out after 10103 milliseconds with 50 out of 2381 bytes received
<!DOCTYPE html>
<!--STATUS OK--><html> <head><met
### 或
[root@iZ28xbsfvc4Z ~]# curl -m 10 https://www.zhangXX.com | head # 超過10秒后,斷開連接
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:10 --:--:-- 0
curl: (28) Connection timed out after 10001 milliseconds

顯示抓取錯誤

當我們請求訪問失敗時或者沒有該網頁時,網站一般都會給出一個錯誤的提示頁面。

如果我們不需要這個錯誤頁面,只想得到簡潔的錯誤信息。那么可以通過 -f, --fail 選項實現。

[root@iZ28xbsfvc4Z 20190713]# curl http://www.zhangblog.com/201912312
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.14.2</center>
</body>
</html>
[root@iZ28xbsfvc4Z 20190713]# curl -f http://www.zhangblog.com/201912312 # 得到更簡潔的錯誤信息
curl: (22) The requested URL returned error: 404 Not Found

表單登錄與cookie使用

參見「Linux curl 表單登錄或提交與cookie使用」:http://www.zhangblog.com/2019/07/20/curl03/

 

2.文件上傳與下載

涉及 FTP 服務,簡單快速搭建可參考:《centos7下安裝FTP服務》「https://www.cnblogs.com/zhi-leaf/p/5983550.html」

文件下載網頁文件下載

# 以進度條展示,而不是進度表展示
[root@iZ28xbsfvc4Z 20190715]# curl -# -o tmp.data2 http://www.zhangblog.com/uploads/tmp/tmp.data
######################################################################## 100.0%

FTP文件下載

說明1:其中 ftp1 用戶是ftp服務端的賬號,具體家目錄是:/mnt/ftp1

說明2:當我們使用 curl 通過 FTP 進行下載時,后面跟的路徑都是:當前使用的 ftp 賬號家目錄為基礎的相對路徑,然后找到的目標文件。

示例1

# 其中 tmp.data 的絕對路徑是:/mnt/ftp1/tmpdata/tmp.data ;ftp1 賬號的家目錄是:/mnt/ftp1
# 說明:/tmpdata/tmp.data 這個路徑是針對 ftp1 賬號的家目錄而言的
[yun@nginx_proxy01 20190715]$ curl -O ftp://ftp1:123456@172.16.1.195:21/tmpdata/tmp.data
# 或者
[yun@nginx_proxy01 20190715]$ curl -O -u ftp1:123456 ftp://172.16.1.195:21/tmpdata/tmp.data
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2048M 100 2048M 0 0 39.5M 0 0:00:51 0:00:51 --:--:-- 143M

示例2

# 其中 nginx-1.14.2.tar.gz 的絕對路徑是:/tmp/nginx-1.14.2.tar.gz ;ftp1 賬號的家目錄是:/mnt/ftp1
# 說明:/../../tmp/nginx-1.14.2.tar.gz 這個路徑是針對 ftp1 賬號的家目錄而言的
[yun@nginx_proxy01 20190715]$ curl -O ftp://ftp1:123456@172.16.1.195:21/../../tmp/nginx-1.14.2.tar.gz
# 或者
[yun@nginx_proxy01 20190715]$ curl -O -u ftp1:123456 ftp://172.16.1.195:21/../../tmp/nginx-1.14.2.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 991k 100 991k 0 0 5910k 0 --:--:-- --:--:-- --:--:-- 5937k

文件上傳

FTP文件上傳

可以通過 -T, --upload-file <file> 選項實現。

說明1:其中 ftp1 用戶是ftp服務端的賬號,具體家目錄是:/mnt/ftp1

# 其中 tmp_client.data 是客戶端本地文件; 
# /tmpdata/ 這個路徑是針對 ftp1 賬號的家目錄而言的,且上傳時該目錄必須是存在的,否則上傳失敗。
# 因此上傳后文件在ftp服務端的絕對路徑是:/mnt/ftp1/tmpdata/tmp_client.data
[yun@nginx_proxy01 20190715]$ curl -T tmp_client.data ftp://ftp1:123456@172.16.1.195:21/tmpdata/
# 或者
[yun@nginx_proxy01 20190715]$ curl -T tmp_client.data -u ftp1:123456 ftp://172.16.1.195:21/tmpdata/
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2048M 0 0 100 2048M 0 95.4M 0:00:21 0:00:21 --:--:-- 49.3M

斷點續傳

使用 -C, --continue-at <offset> 選項實現。其中使用 “-C -”「注意有空格和無空格的情況」,告訴curl自動找出在哪里/如何恢復傳輸。

網頁端斷點續傳下載


 

curl -C - -o tmp.data http://www.zhangblog.com/uploads/tmp/tmp.data # 下載一個 2G 的文件

FTP斷點續傳下載

細節就不多說了,可參見上面的「FTP文件下載

curl -C - -o tmp.data1 ftp://ftp1:123456@172.16.1.195:21/tmpdata/tmp.data # 下載一個 2G 的文件
# 或則
curl -C - -o tmp.data1 -u ftp1:123456 ftp://172.16.1.195:21/tmpdata/tmp.data # 下載一個 2G 的文件

分段下載

有時文件比較大,或者難以迅速傳輸,而利用分段傳輸,可以實現穩定、高效并且有保障的傳輸,更具有實用性,同時容易對差錯文件進行更正。

可使用 -r, --range <range> 選項實現。

如下示例使用了同一張圖片,大小為 18196 字節。

網頁端分段下載分段下載

[root@iZ28xbsfvc4Z 20190715]# curl -I http://www.zhangblog.com/uploads/hexo/00.jpg # 查看文件大小
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Mon, 15 Jul 2019 03:23:44 GMT
Content-Type: image/jpeg
Content-Length: 18196 # 文件大小
Last-Modified: Fri, 05 Jul 2019 08:04:58 GMT
Connection: keep-alive
ETag: "5d1f04aa-4714"
Accept-Ranges: bytes
### 分段下載一個文件
[root@iZ28xbsfvc4Z 20190715]# curl -r 0-499 -o 00-jpg.part1 http://www.zhangblog.com/uploads/hexo/00.jpg
[root@iZ28xbsfvc4Z 20190715]# curl -r 500-999 -o 00-jpg.part2 http://www.zhangblog.com/uploads/hexo/00.jpg
[root@iZ28xbsfvc4Z 20190715]# curl -r 1000- -o 00-jpg.part3 http://www.zhangblog.com/uploads/hexo/00.jpg

查看下載文件

[root@iZ28xbsfvc4Z 20190715]# ll
total 36
-rw-r--r-- 1 root root 500 Jul 15 11:25 00-jpg.part1
-rw-r--r-- 1 root root 500 Jul 15 11:25 00-jpg.part2
-rw-r--r-- 1 root root 17196 Jul 15 11:26 00-jpg.part3

文件合并

[root@iZ28xbsfvc4Z 20190715]# cat 00-jpg.part1 00-jpg.part2 00-jpg.part3 > 00.jpg
[root@iZ28xbsfvc4Z 20190715]# ll 00.jpg
total 56
-rw-r--r-- 1 root root 18196 Jul 15 11:29 00.jpg

FTP分段下載分段下載

[yun@nginx_proxy01 20190715]$ curl -r 0-499 -o 00-jpg.part1 ftp://ftp1:123456@172.16.1.195:21/tmpdata/00.jpg
[yun@nginx_proxy01 20190715]$ curl -r 500-999 -o 00-jpg.part2 ftp://ftp1:123456@172.16.1.195:21/tmpdata/00.jpg
[yun@nginx_proxy01 20190715]$ curl -r 1000- -o 00-jpg.part3 ftp://ftp1:123456@172.16.1.195:21/tmpdata/00.jpg

查看下載文件

[yun@nginx_proxy01 20190715]$ ll 00-jpg.part*
-rw-rw-r-- 1 yun yun 500 Jul 15 17:59 00-jpg.part1
-rw-rw-r-- 1 yun yun 500 Jul 15 18:00 00-jpg.part2
-rw-rw-r-- 1 yun yun 17196 Jul 15 18:00 00-jpg.part3

文件合并

[yun@nginx_proxy01 20190715]$ cat 00-jpg.part1 00-jpg.part2 00-jpg.part3 > 00.jpg
[yun@nginx_proxy01 20190715]$ ll 00.jpg
-rw-rw-r-- 1 yun yun 18196 Jul 15 18:02 00.jpg

聲明:本文為CSDN博主「LightZhang666」的原創文章,版權歸作者所有,如需轉載請聯系作者。

原文:https://blog.csdn.net/woshizhangliang999/article/details/98946071

【End】

分享到:
標簽:Linux curl
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定