1、背景
前文在續(xù),書接上一回Linux- 系統(tǒng)隨你玩之–玩出花活的命令瀏覽器下,玩出花活的命令瀏覽器有個(gè)雙生姐妹花,今天我們就請(qǐng)它閃亮出場 。
2、命令瀏覽器-雙生姐妹花
2.1、姐妹花簡介
curl是一個(gè)利用URL語法在命令行下工作的文件傳輸工具,1997年首次發(fā)行。在那個(gè)視窗還沒流行的黑暗時(shí)代,它是一個(gè)用于傳輸數(shù)據(jù)的命令行工具與庫,同時(shí)它支持文件上傳和下載。
curl(客戶端URL)是一個(gè)開放源代碼的命令行工具,還包含了用于程序開發(fā)的跨平臺(tái)的庫(libcurl),用于在服務(wù)器之間傳輸數(shù)據(jù),并分發(fā)給幾乎所有新的操作系統(tǒng)。
curl編程用于需要通過Internet協(xié)議發(fā)送或接收數(shù)據(jù)的幾乎任何地方。
curl命令使用了libcurl庫來實(shí)現(xiàn),libcurl庫經(jīng)常用在C程序中用來處理HTTP請(qǐng)求,curlpp是libcurl的一個(gè)C++封裝,這幾個(gè)東西可以用在抓取網(wǎng)頁、網(wǎng)絡(luò)監(jiān)控等方面的開發(fā),而curl命令可以幫助來解決開發(fā)過程中遇到的問題。
2.2 、驗(yàn)名正身
我們可以通過curl的官方網(wǎng)站獲取該工具的最新版本,以及最全面的使用方法。
https://curl.haxx.se/
它的開源代碼存放在:github
https://github.com/curl/curl
從官方我們可以知道curl支持以多種方式檢索和發(fā)送數(shù)據(jù),并輸出到標(biāo)準(zhǔn)輸出,可以無縫銜接標(biāo)準(zhǔn)unix管道使用。在絕大多數(shù)的*nix操作系統(tǒng)上都默認(rèn)安裝。
cURL支持幾乎所有的互聯(lián)網(wǎng)協(xié)議(DICT,F(xiàn)ILE,F(xiàn)TP,F(xiàn)TPS,GOPHER,HTTP,HTTPS,IMAP,IMAPS,LDAP,LDAPS,MQTT,POP3,POP3S,RTMP,RTMPS,RTSP,SCP,SFTP,SMB,SMBS,SMTP,SMTPS,TELNET和TFTP)。
curl還支持SSL認(rèn)證、HTTP POST、HTTP PUT、FTP上傳, HTTP form based upload、proxies、HTTP/2、cookies、用戶名+密碼認(rèn)證(Basic, Plain, Digest,CRAM-MD5, NTLM, Negotiate and Kerberos)、file transfer resume、proxy tunneling。
curl設(shè)計(jì)為無用戶交互下完成工作;curl提供了一大堆非常有用的功能,包括代理訪問、用戶認(rèn)證、ftp上傳下載、HTTP POST、SSL連接、cookie支持、斷點(diǎn)續(xù)傳…。
2.3、常用功能選項(xiàng)
語法格式:
curl [option] [url]
參數(shù)選項(xiàng):
-A:隨意指定自己這次訪問所宣稱的自己的瀏覽器信息
-A/–user-agent 設(shè)置用戶代理發(fā)送給服務(wù)器
-b/–cookie <name=string/file> cookie字符串或文件讀取位置
????- basic 使用HTTP基本驗(yàn)證
-B/–use-ascii 使用ASCII /文本傳輸
-c/–cookie-jar 操作結(jié)束后把cookie寫入到這個(gè)文件中
-C/–continue-at 斷點(diǎn)續(xù)轉(zhuǎn)
-d/–data HTTP POST方式傳送數(shù)據(jù)
???? --data-ascii 以ascii的方式post數(shù)據(jù)
????--data-binary 以二進(jìn)制的方式post數(shù)據(jù)
???? --negotiate 使用HTTP身份驗(yàn)證
????--digest 使用數(shù)字身份驗(yàn)證
????--disable-eprt 禁止使用EPRT或LPRT
????--disable-epsv 禁止使用EPSV
-D/–dump-header 把header信息寫入到該文件中
-e/–referer 來源網(wǎng)址
-f/–fail 連接失敗時(shí)不顯示http錯(cuò)誤
-F/–form <name=content> 模擬http表單提交數(shù)據(jù)
-g/–globoff 禁用網(wǎng)址序列和范圍使用{}和[]
-h/–help 幫助
-H/–header 自定義頭信息傳遞給服務(wù)器
????--ignore-content-length 忽略的HTTP頭信息的長度
-I/–head 僅返回頭部信息,使用HEAD請(qǐng)求
-m/–max-time 指定處理的最大時(shí)長
-o/–output 指定輸出文件名稱
???--retry 指定重試次數(shù)
-O/–remote-name 把輸出寫到該文件中,保留遠(yuǎn)程文件的文件名
-r/–range 檢索來自HTTP/1.1或FTP服務(wù)器字節(jié)范圍
-s/–silent 減少輸出的信息,比如進(jìn)度
???--connect-timeout 指定嘗試連接的最大時(shí)長
-T/–upload-file 上傳文件
-u/–user <user[:password]> 設(shè)置服務(wù)器的用戶和密碼
-v/–verbose 輸出詳細(xì)的返回信息
-w/–write-out [format] 什么輸出完成后
-x/–proxy <host[:port]> 在給定的端口上使用HTTP代理
-#/–progress-bar 進(jìn)度條顯示當(dāng)前的傳送狀態(tài)
-X/–request 指定什么命令
-y/–speed-time 放棄限速所要的時(shí)間。默認(rèn)為30
-Y/–speed-limit 停止傳輸速度的限制,速度時(shí)間’秒
3、常用實(shí)操
3.1、發(fā)送請(qǐng)求獲取文件
3.1.1、抓取頁面內(nèi)容到一個(gè)文件中
通過-o/-O選項(xiàng)保存下載的文件到指定的文件中:
-o:將文件保存為命令行中指定的文件名的文件中
-O:使用URL中默認(rèn)的文件名保存文件到本地(注意后面的url要具體到某個(gè)文件,不然抓不下來。還可以配合使用正則來抓?。?/p>
curl -o index.html http://www.baidu.com --將百度首頁內(nèi)容抓取到 index.html中
curl -O index.html http://www.baidu.com
3.1.2、多個(gè)文件下載
A. 使用多個(gè)-O可以同時(shí)獲取多個(gè)文件內(nèi)容。若同時(shí)從同一站點(diǎn)下載多個(gè)文件時(shí),curl會(huì)嘗試重用鏈接。
B. 使用循環(huán)下載
有時(shí)候下載圖片可以能是前面的部分名稱是一樣的,就最后的文件名末尾名不一樣。這樣就會(huì)把test1,test2,test3全部保存下來.
????curl -O http://www.linux.com/test[1-3].jpg
3.1.3、下載ftp文件
curl可以通過ftp下載文件,curl提供兩種從ftp中下載的語法
curl -O -u 用戶名:密碼 ftp://www.linux.com/test1.jpg
curl -O ftp://用戶名:密碼@www.linux.com/test1.jpg
3.1.4、斷點(diǎn)續(xù)傳
斷點(diǎn)續(xù)轉(zhuǎn),從文件頭的指定位置開始繼續(xù)下載/上傳;offset續(xù)傳開始的位置,如果offset值為“-”,
curl會(huì)自動(dòng)從文件中識(shí)別起始位置開始傳輸;
curl -# -o centosstream8.iso -C - http://mirrors.aliyun.com/centos/8-stream/isos/x86_64/CentOS-Stream-8-20230308.3-x86_64-dvd1.iso
curl -C -O http://www.linux.com/test1.jpg
下載進(jìn)度條
顯示進(jìn)度條(option:-#)或不顯示進(jìn)度條(option:-s)
curl -# -O https://i0.hdslb.com/bfs/archive/f9503413dd4ac32594bac03a4671601e21b02064.jpg
curl -s -O https://i0.hdslb.com/bfs/archive/f9503413dd4ac32594bac03a4671601e21b02064.jpg
3.1.5、上傳文件
- FTP:
curl -T test1.jpg -u 用戶名:密碼 ftp://www.linux.com/img/
- 表單上傳文件: -F/–form
相當(dāng)于設(shè)置form表單的method="POST"和enctype='multipart/form-data’兩個(gè)屬性
curl --form “fileupload=@filename.txt” http://hostname/resource
3.1.6、內(nèi)容輸出
- 獲取服務(wù)器內(nèi)容,默認(rèn)將輸出打印到標(biāo)準(zhǔn)輸出中(STDOUT)中。
curl https://curl.se
- debug場景中,通過 -v參數(shù)可以看到詳細(xì)解析過程
curl -v https://curl.se/
3.2 、利用curl測試接口
- 常用的測試命令為:
curl -v -X POST -H "Content-Type: application/json" http://127.0.0.1:8080/user -d'{"username":"admin","password":"xxxxxx"}'
- 測試get請(qǐng)求
curl URL
URL -O 文件絕對(duì)路徑
curl http://www.linuxidc.com/login.cgi?user=test&password=123456
- 測試post請(qǐng)求
請(qǐng)求主體用json格式
curl -X POST -H ‘content-type: application/json’ -d @json文件絕對(duì)路徑 URL
curl -X POST -H ‘content-type: application/json’ -d ‘json內(nèi)容’ URL
請(qǐng)求主體用xml格式
curl -X POST -H ‘content-type: application/xml’ -d @xml文件絕對(duì)路徑 URL
curl -X POST -H ‘content-type: application/xml’ -d ‘xml內(nèi)容’ URL
curl -d “user=nickwolfe&password=12345” http://www.linuxidc.com/login.cgi
A. 發(fā)送post請(qǐng)求時(shí)需要使用-X選項(xiàng),除了使用POST外,還可以使用http規(guī)范定義的其它請(qǐng)求謂詞,如PUT,DELETE等
curl -XPOST url
B. 發(fā)送post請(qǐng)求時(shí),通常需要指定請(qǐng)求體數(shù)據(jù)??梢允褂?d或–data來指定發(fā)送的請(qǐng)求體。
curl -XPOST -d “queryname=leo&pageSize=10” url
C. 如果需要對(duì)請(qǐng)求數(shù)據(jù)進(jìn)行urlencode:
curl -XPOST --data-urlencode “queryname=leo&pageSize=10” url
d.發(fā)送post請(qǐng)求還可以考慮下面幾個(gè)子選項(xiàng):
–data-raw
–data-ascii
–data-binary
3.3 、模擬登錄相關(guān)
3.3.1、cookie
1.保存http的response里面的 cookie 信息。
????curl -c cookiec.txt http://www.linux.com
2.保存http的response里面的 header 信息。
????curl -D cookied.txt http://www.baidu.com
3.curl可以根據(jù)舊的cookie寫出新cookie并發(fā)送到網(wǎng)站:
????curl -b cookies.txt -c newcookies.txt www.cookiesite. com
很多網(wǎng)站都是通過監(jiān)視你的cookie信息來判斷你是否按規(guī)矩訪問他們的網(wǎng)站的,因此我們需要使用保存的cookie信息。
curl -b cookiec.txt http://www.linux.com
curl -b “domain=linux.com” http://www.linux.com 自定義cookie內(nèi)容信息
3.3.2、設(shè)置代理字符串
當(dāng)我們經(jīng)常用curl去訪問網(wǎng)站上的信息,人家會(huì)把你的IP給屏蔽掉的,這個(gè)時(shí)候,我們可以用代理
#指定代理主機(jī)和端口
curl -x proxysever.test.com:3128 http://google.co.in 或
curl -x 34.xx.xx.xx:12779 -o home.html http://www.XXXX.com
- curl限制帶寬
curl URL --limit-rate 速度
3.3.3、 加密與認(rèn)證
1. 加密HTTP
如果是通過OpenSSL加密的https協(xié)議傳輸?shù)木W(wǎng)頁,curl可以直接訪問:
curl https://xxxx. com
2. http認(rèn)證
如果是采用證書認(rèn)證的http地址,證書在本地,那么curl這樣使用:
curl -E mycert.pem https://xxxx. com
3.3.4、域名解析
不需要修改/etc/hosts,curl直接解析ip請(qǐng)求域名
將 http://example.com 或 https://example.com 請(qǐng)求指定域名解析的IP為127.0.0.1
參數(shù)語法: --resolve host:port:address Force resolve of HOST:PORT to ADDRESS
curl --resolve example.com:80:127.0.0.1 http://example.com/
curl --resolve example.com:443:127.0.0.1 https://example.com/
3.3.4、 301、302
如訪問出現(xiàn)301或302,curl 命令行不支持 301 或 302 的解決辦法
curl -L --max-redirs 2 http://www.linux.com
-L 指令其實(shí)就是支持 location 頭
–max-redirs 就是支持的重定向深度,這里指定 2,主要原因是防止進(jìn)入死循環(huán)。文章來源:http://www.zghlxwxcb.cn/news/detail-782142.html
4、結(jié)語
各位看官命令瀏覽器-雙生姐妹花curl今天就到此為止,預(yù)知此系列后事如何且聽下回分解 您了!文章來源地址http://www.zghlxwxcb.cn/news/detail-782142.html
到了這里,關(guān)于Linux- 系統(tǒng)隨你玩之--玩出花活的命令瀏覽器-雙生姐妹花的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!