1. -X 指定請求方式
GET請求
curl -X GET http://www.jackyops.com/search?data=123 # -X GET是可選的
POST請求
curl -X POST -d"data=123&key=456" http://www.jackyops.com/search -v
由於-d選項為使用POST方式向server發送數據,因此在使用-d的時候,可以省略-X POST。使用-d時,將使用Content-type:application/x-www-form-urlencoded方式發送數據。
如果想使用JSON形式post數據,可以使用-H指定頭部類型
curl -H "Content-Type:application/json" -d '{"data":"123","key":"456"}' http://www.jackyops.com/search -v
如果想在請求的時候帶上Cookie,可以這樣
curl -H "Cookie:username=XXX" {URL}
2、開啟gzip請求
curl -I http://www.baidu.com/ -H Accept-Encoding:gzip,defalte
3、監控網頁的響應時間
curl -o /dev/null -s -w "time_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{time_total}\n" "http://www.htcview.com"
time_connect: 0.015
time_starttransfer: 0.197
time_total: 0.245
curl -o /dev/null -s -w "time_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{time_total}\n" "https://www.baidu.com"
4. 監控站點可用性
curl -o /dev/null -s -w %{http_code} "http://www.htcview.com"
5、以http1.0協議請求(默認為http1.1)
curl -o ..............
監控站點首頁下載時間:
curl -o /dev/null -s -w ‘%{time_total}’ http://www.htcview.com
curl -o /dev/null -s -w ‘%{http_code}’ http://www.htcview.com
curl -o /dev/null -s -w %{http_code}:%{time_connect}:%{time_starttransfer}:%{time_total} http://www.htcview.com
-s 靜默輸出;沒有-s的話就是下面的情況,這是在腳本等情況下不需要的信息。
[jacky@jackyops ~]$ curl -o /dev/null -w ‘%{time_total}’ http://www.htcview.com
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 58276 0 58276 0 0 10130 0 --:--:-- 0:00:05 --:--:-- 13741
結果:‘5.753’
監控首頁各項時間指標:
curl -o /dev/null -s -w ‘%{time_connect}:%{time_starttransfer}:%{time_total}’ http://www.htcview.com
‘0.519:0.703:0.752’
時間指標解釋 :
time_connect 建立到服務器的 TCP 連接所用的時間
time_starttransfer 在發出請求之后,Web 服務器返回數據的第一個字節所用的時間
time_total 完成請求所用的時間
在 發出請求之后,Web 服務器處理請求並開始發回數據所用的時間是
(time_starttransfer)1.044 - (time_connect)0.244 = 0.8 秒
客戶機從服務器下載數據所用的時間是
(time_total)2.672 - (time_starttransfer)1.044 = 1.682 秒
指定特定主機IP地址訪問網站
curl -x 106.11.208.145:80 http://www.youku.com
6. curl用法大全
-x 指定訪問IP與端口號
curl -x 192.168.4.12:80 http://www.jackyops.com
-I 僅僅取文件的http頭部
curl -I -x 192.168.4.12:80 http://www.jackyops.com
用referer做的防盜鏈,就可以使用-e來設置
curl -e “http://www.images.org” http:// www.jackyops.com -v -I
-H去構造你想要的http頭部
curl -H “X-Forward-For:8.8.8.8″ http://www.jackyops.com -v -I
curl反饋時間,例如連接時間,下載時間等信息
curl -w %{time_connect}:%{time_starttransfer}:%{time_total} -s -o /dev/null
將一個文件保存到硬盤上,命名為file.html
curl -o file.html http://www.jackyops.com/index.html
下載index.html文件, -O是大寫的字母
curl -O http://www.jackyops.com/index.html
curl提交用戶名和密碼
curl http://name:passwd@www.jackyops.com
curl -u name:passwd http://www.jackyops.com
-b "cookie" 此參數用來構造一個攜帶cookie的請求
前面講到了使用 -H 來發送 Cookie 的方法,這種方式是直接將 Cookie 字符串寫在命令中。如果使用 -b 來自定義 Cookie,命令如下:
curl -b “JSESSIONID=D0112A5063D938586B659EF8F939BE24” http://www.jackyops.com
如果要從文件中讀取 Cookie,-H 就無能為力了,此時可以使用 -b 來達到這一目的:
curl -b “cookie-example” http://www.jackyops.com
即 -b 后面既可以是 Cookie 字符串,也可以是保存了 Cookie 的文件名。
1. curl 查看web站點rt
curl -o /dev/null -s -w %{time_namelookup}::%{time_connect}::%{time_starttransfer}::%{time_total}::%{speed_download}"\n" "http://www.taobao.com"
0.014::0.015::0.018::0.019::1516256.00
2. curl的參數
-o:把curl 返回的html、js 寫到垃圾回收站[ /dev/null]
-s:去掉所有狀態
curl -o /dev/null -w %{time_namelookup}::%{time_connect}::%{time_starttransfer}::%{time_total}::%{speed_download}"\n" "http://www.taobao.com"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 28774 0 28774 0 0 1145k 0 --:--:-- --:--:-- --:--:-- 7550k
0.014::0.016::0.020::0.025::1173060.000
-w:按照后面的格式寫出rt
time_namelookup:DNS 解析域名[www.taobao.com]的時間
time_commect:client和server端建立TCP 連接的時間
time_starttransfer:從client發出請求;到web的server 響應第一個字節的時間
time_total:client發出請求;到web的server發送會所有的相應數據的時間
speed_download:下周速度 單位 byte/s
3. 上面時間rt的理解【單位是 秒】
0.014: DNS 服務器解析www.taobao.com 的時間單位是s
0.015: client發出請求,到c/s 建立TCP 的時間;里面包括DNS解析的時間
0.018: client發出請求;到s響應發出第一個字節開始的時間;包括前面的2個時間
0.019: client發出請求;到s把響應的數據全部發送給client;並關閉connect的時間
1516256.00 :下周數據的速度
1. 建立TCP連接到server返回client第一個字節的時間:0.018s - 0.015s = 0.003s
2. server把響應數據發送給client的時間:0.019s - 0.018 = 0.01s
命令:curl
在Linux中curl是一個利用URL規則在命令行下工作的文件傳輸工具,可以說是一款很強大的http命令行工具。它支持文件的上傳和下載,是綜合傳輸工具,但按傳統,習慣稱url為下載工具。
語法:# curl [option] [url]
常見參數:
-A/--user-agent <string> 設置用戶代理發送給服務器 -b/--cookie <name=string/file> cookie字符串或文件讀取位置 -c/--cookie-jar <file> 操作結束后把cookie寫入到這個文件中 -C/--continue-at <offset> 斷點續轉 -D/--dump-header <file> 把header信息寫入到該文件中 -e/--referer 來源網址 -f/--fail 連接失敗時不顯示http錯誤 -o/--output 把輸出寫到該文件中 -O/--remote-name 把輸出寫到該文件中,保留遠程文件的文件名 -r/--range <range> 檢索來自HTTP/1.1或FTP服務器字節范圍 -s/--silent 靜音模式。不輸出任何東西 -T/--upload-file <file> 上傳文件 -u/--user <user[:password]> 設置服務器的用戶和密碼 -w/--write-out [format] 什么輸出完成后 -x/--proxy <host[:port]> 在給定的端口上使用HTTP代理 -#/--progress-bar 進度條顯示當前的傳送狀態
例子:
1、基本用法
# curl http://www.linux.com
執行后,www.linux.com 的html就會顯示在屏幕上了
Ps:由於安裝linux的時候很多時候是沒有安裝桌面的,也意味着沒有瀏覽器,因此這個方法也經常用於測試一台服務器是否可以到達一個網站
2、保存訪問的網頁
2.1:使用linux的重定向功能保存
# curl http://www.linux.com >> linux.html
2.2:可以使用curl的內置option:-o(小寫)保存網頁
$ curl -o linux.html http://www.linux.com
執行完成后會顯示如下界面,顯示100%則表示保存成功
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 79684 0 79684 0 0 3437k 0 --:--:-- --:--:-- --:--:-- 7781k
2.3:可以使用curl的內置option:-O(大寫)保存網頁中的文件
要注意這里后面的url要具體到某個文件,不然抓不下來
# curl -O http://www.linux.com/hello.sh
3、測試網頁返回值
# curl -o /dev/null -s -w %{http_code} www.linux.com
Ps:在腳本中,這是很常見的測試網站是否正常的用法
4、指定proxy服務器以及其端口
很多時候上網需要用到代理服務器(比如是使用代理服務器上網或者因為使用curl別人網站而被別人屏蔽IP地址的時候),幸運的是curl通過使用內置option:-x來支持設置代理
# curl -x 192.168.100.100:1080 http://www.linux.com
5、cookie
有些網站是使用cookie來記錄session信息。對於chrome這樣的瀏覽器,可以輕易處理cookie信息,但在curl中只要增加相關參數也是可以很容易的處理cookie
5.1:保存http的response里面的cookie信息。內置option:-c(小寫)
# curl -c cookiec.txt http://www.linux.com
執行后cookie信息就被存到了cookiec.txt里面了
5.2:保存http的response里面的header信息。內置option: -D
# curl -D cookied.txt http://www.linux.com
執行后cookie信息就被存到了cookied.txt里面了
注意:-c(小寫)產生的cookie和-D里面的cookie是不一樣的。
5.3:使用cookie
很多網站都是通過監視你的cookie信息來判斷你是否按規矩訪問他們的網站的,因此我們需要使用保存的cookie信息。內置option: -b
# curl -b cookiec.txt http://www.linux.com
6、模仿瀏覽器
有些網站需要使用特定的瀏覽器去訪問他們,有些還需要使用某些特定的版本。curl內置option:-A可以讓我們指定瀏覽器去訪問網站
# curl -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" http://www.linux.com
這樣服務器端就會認為是使用IE8.0去訪問的
7、偽造referer(盜鏈)
很多服務器會檢查http訪問的referer從而來控制訪問。比如:你是先訪問首頁,然后再訪問首頁中的郵箱頁面,這里訪問郵箱的referer地址就是訪問首頁成功后的頁面地址,如果服務器發現對郵箱頁面訪問的referer地址不是首頁的地址,就斷定那是個盜連了
curl中內置option:-e可以讓我們設定referer
# curl -e "www.linux.com" http://mail.linux.com
這樣就會讓服務器其以為你是從www.linux.com點擊某個鏈接過來的
8、下載文件
8.1:利用curl下載文件。
#使用內置option:-o(小寫)
# curl -o dodo1.jpg http:www.linux.com/dodo1.JPG
#使用內置option:-O(大寫)
# curl -O http://www.linux.com/dodo1.JPG
這樣就會以服務器上的名稱保存文件到本地
8.2:循環下載
有時候下載圖片可以能是前面的部分名稱是一樣的,就最后的尾椎名不一樣
# curl -O http://www.linux.com/dodo[1-5].JPG
這樣就會把dodo1,dodo2,dodo3,dodo4,dodo5全部保存下來
8.3:下載重命名
# curl -O http://www.linux.com/{hello,bb}/dodo[1-5].JPG
由於下載的hello與bb中的文件名都是dodo1,dodo2,dodo3,dodo4,dodo5。因此第二次下載的會把第一次下載的覆蓋,這樣就需要對文件進行重命名。
# curl -o #1_#2.JPG http://www.linux.com/{hello,bb}/dodo[1-5].JPG
這樣在hello/dodo1.JPG的文件下載下來就會變成hello_dodo1.JPG,其他文件依此類推,從而有效的避免了文件被覆蓋
8.4:分塊下載
有時候下載的東西會比較大,這個時候我們可以分段下載。使用內置option:-r
# curl -r 0-100 -o dodo1_part1.JPG http://www.linux.com/dodo1.JPG # curl -r 100-200 -o dodo1_part2.JPG http://www.linux.com/dodo1.JPG # curl -r 200- -o dodo1_part3.JPG http://www.linux.com/dodo1.JPG # cat dodo1_part* > dodo1.JPG
這樣就可以查看dodo1.JPG的內容了
8.5:通過ftp下載文件
curl可以通過ftp下載文件,curl提供兩種從ftp中下載的語法
# curl -O -u 用戶名:密碼 ftp://www.linux.com/dodo1.JPG # curl -O ftp://用戶名:密碼@www.linux.com/dodo1.JPG
8.6:顯示下載進度條
# curl -# -O http://www.linux.com/dodo1.JPG
8.7:不會顯示下載進度信息
# curl -s -O http://www.linux.com/dodo1.JPG
9、斷點續傳
在windows中,我們可以使用迅雷這樣的軟件進行斷點續傳。curl可以通過內置option:-C同樣可以達到相同的效果
如果在下載dodo1.JPG的過程中突然掉線了,可以使用以下的方式續傳
# curl -C -O http://www.linux.com/dodo1.JPG
10、上傳文件
curl不僅僅可以下載文件,還可以上傳文件。通過內置option:-T來實現
# curl -T dodo1.JPG -u 用戶名:密碼 ftp://www.linux.com/img/
這樣就向ftp服務器上傳了文件dodo1.JPG
11、顯示抓取錯誤
# curl -f http://www.linux.com/error
其他參數(此處翻譯為轉載):
-a/--append 上傳文件時,附加到目標文件 --anyauth 可以使用“任何”身份驗證方法 --basic 使用HTTP基本驗證 -B/--use-ascii 使用ASCII文本傳輸 -d/--data <data> HTTP POST方式傳送數據 --data-ascii <data> 以ascii的方式post數據 --data-binary <data> 以二進制的方式post數據 --negotiate 使用HTTP身份驗證 --digest 使用數字身份驗證 --disable-eprt 禁止使用EPRT或LPRT --disable-epsv 禁止使用EPSV --egd-file <file> 為隨機數據(SSL)設置EGD socket路徑 --tcp-nodelay 使用TCP_NODELAY選項 -E/--cert <cert[:passwd]> 客戶端證書文件和密碼 (SSL) --cert-type <type> 證書文件類型 (DER/PEM/ENG) (SSL) --key <key> 私鑰文件名 (SSL) --key-type <type> 私鑰文件類型 (DER/PEM/ENG) (SSL) --pass <pass> 私鑰密碼 (SSL) --engine <eng> 加密引擎使用 (SSL). "--engine list" for list --cacert <file> CA證書 (SSL) --capath <directory> CA目 (made using c_rehash) to verify peer against (SSL) --ciphers <list> SSL密碼 --compressed 要求返回是壓縮的形勢 (using deflate or gzip) --connect-timeout <seconds> 設置最大請求時間 --create-dirs 建立本地目錄的目錄層次結構 --crlf 上傳是把LF轉變成CRLF --ftp-create-dirs 如果遠程目錄不存在,創建遠程目錄 --ftp-method [multicwd/nocwd/singlecwd] 控制CWD的使用 --ftp-pasv 使用 PASV/EPSV 代替端口 --ftp-skip-pasv-ip 使用PASV的時候,忽略該IP地址 --ftp-ssl 嘗試用 SSL/TLS 來進行ftp數據傳輸 --ftp-ssl-reqd 要求用 SSL/TLS 來進行ftp數據傳輸 -F/--form <name=content> 模擬http表單提交數據 -form-string <name=string> 模擬http表單提交數據 -g/--globoff 禁用網址序列和范圍使用{}和[] -G/--get 以get的方式來發送數據 -h/--help 幫助 -H/--header <line> 自定義頭信息傳遞給服務器 --ignore-content-length 忽略的HTTP頭信息的長度 -i/--include 輸出時包括protocol頭信息 -I/--head 只顯示文檔信息 -j/--junk-session-cookies 讀取文件時忽略session cookie --interface <interface> 使用指定網絡接口/地址 --krb4 <level> 使用指定安全級別的krb4 -k/--insecure 允許不使用證書到SSL站點 -K/--config 指定的配置文件讀取 -l/--list-only 列出ftp目錄下的文件名稱 --limit-rate <rate> 設置傳輸速度 --local-port<NUM> 強制使用本地端口號 -m/--max-time <seconds> 設置最大傳輸時間 --max-redirs <num> 設置最大讀取的目錄數 --max-filesize <bytes> 設置最大下載的文件總量 -M/--manual 顯示全手動 -n/--netrc 從netrc文件中讀取用戶名和密碼 --netrc-optional 使用 .netrc 或者 URL來覆蓋-n --ntlm 使用 HTTP NTLM 身份驗證 -N/--no-buffer 禁用緩沖輸出 -p/--proxytunnel 使用HTTP代理 --proxy-anyauth 選擇任一代理身份驗證方法 --proxy-basic 在代理上使用基本身份驗證 --proxy-digest 在代理上使用數字身份驗證 --proxy-ntlm 在代理上使用ntlm身份驗證 -P/--ftp-port <address> 使用端口地址,而不是使用PASV -Q/--quote <cmd> 文件傳輸前,發送命令到服務器 --range-file 讀取(SSL)的隨機文件 -R/--remote-time 在本地生成文件時,保留遠程文件時間 --retry <num> 傳輸出現問題時,重試的次數 --retry-delay <seconds> 傳輸出現問題時,設置重試間隔時間 --retry-max-time <seconds> 傳輸出現問題時,設置最大重試時間 -S/--show-error 顯示錯誤 --socks4 <host[:port]> 用socks4代理給定主機和端口 --socks5 <host[:port]> 用socks5代理給定主機和端口 -t/--telnet-option <OPT=val> Telnet選項設置 --trace <file> 對指定文件進行debug --trace-ascii <file> Like --跟蹤但沒有hex輸出 --trace-time 跟蹤/詳細輸出時,添加時間戳 --url <URL> Spet URL to work with -U/--proxy-user <user[:password]> 設置代理用戶名和密碼 -V/--version 顯示版本信息 -X/--request <command> 指定什么命令 -y/--speed-time 放棄限速所要的時間。默認為30 -Y/--speed-limit 停止傳輸速度的限制,速度時間'秒 -z/--time-cond 傳送時間設置 -0/--http1.0 使用HTTP 1.0 -1/--tlsv1 使用TLSv1(SSL) -2/--sslv2 使用SSLv2的(SSL) -3/--sslv3 使用的SSLv3(SSL) --3p-quote like -Q for the source URL for 3rd party transfer --3p-url 使用url,進行第三方傳送 --3p-user 使用用戶名和密碼,進行第三方傳送 -4/--ipv4 使用IP4 -6/--ipv6 使用IP6