curl支援各式各樣的協定,
如(DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET, TFTP)
用非GUI方式去達成所有GUI的操作
curl https//www.google.com
[1-4] 1~4
[001-100] 001~100
{a,b,c} 用a b c 輪流
-A,--user-agent 'Mozilla/4.0'
如果沒有指定user-agent在某些 server可能會造成CGIs fail
--anyauth
讓curl去尋找Server支援哪種認證,並且選擇最安全的認證
-b, --cookie <name=data>
預設先前已經從Server抓取cookie了,而抓取的Cookies格式應該是
Set-Cookie: Name1=Value1; Name2=value2
如果--cookie 後面只接名字 而沒有等號(=),代表他應該是指向一個cookie file
如果使用這個指令的同時還有使用--location 代表這個檔案讀取的Cookie應該是Plain Http headers or Netscape/Mozilla cookie file Format
注意: -b --cookie 僅用於Input,沒有cookie會被存在檔案裏面,假如你想要儲存cookie則使用-c,--cookie-jar的選項,倘若你想儲存HTTP headers成為檔案則用-D, --dump-header
-B, --use-ascii
FTP/LDAP Enable ASCII transfer. for FTP,讓資料可以送到win32 的系統?
--basic
HTTP Tell curl to use HTTP Basic authentication 這個通常是預設值。
-c, --cookie-jar <file name>
指定哪個檔案你想要curl把所有的cookie都寫進去。
特殊用法 -c, --cookie-jar - 用 - 把cookie都輸出到CLI上。
假如cookie jar can't be created or written to 可以使用 -v 來取得相關的錯誤訊息
-C, --continue-at <offset>
繼續 or 保留 控制傳送的檔案從第幾個Byte開始傳送。 -C - 告訴curl去自動找到從哪裡開始繼續傳送的活動。
--ciphers <list of ciphers>
指定要使用哪一種Ciphers 在此次的連線中,
cipher 詳細解說連結 http://www.openssl.org/docs/apps/ciphers.html
--compressed
請求一個壓縮的Response,使用curl所支援的演算法,可能是gzip之類的,然後儲存未壓縮的文件,假設Server傳回了curl不認得的加密方式,
會造成curl report error。
--connect-timeout <seconds>
用於Connection的階段,假設一但連線成功後,此功能就沒有用了ˊ。
如果你是要連線多久後自動斷線則參考 -m, --max-time
--create-dirs
運用於FTP,可以與-o 指令結合, 假設-o的指令是指向一個目錄,則他會幫你把整個目錄給載下來,
假設-o 指向的不是目錄,亦或是指向的目錄早就存在,那他就不會幫你在創造目錄了。 指令就沒用哩
--crlfile <file>
https 提供一個PEM format的認證檔案 (7.19.7版本新增的功能)
-d,--data <data>
送出POST的資料給SERVER, 這種傳送方式就相當於你前往一個網頁,然後填寫一個表單,再按下送出。同樣的POST道理。
content-type一樣都是application/x-www-form-urlencoded 可以和-F, --form比較
-d, --data is the same as --data-ascii.
假如你想要傳送純二元資料,To post data purely binary 使用--data-binary option
假設你想要將資料以URL-encode the value of a form field you may use --data-urlencode.
在正常情況下,表格都會有多個欄位,
而在command line 想要模擬同時傳送多個資料,可以使用 -d name=neil -d skill=coding 會產生
post chunk looks like name=neil&skill=coding
另一種處理方式,假設你想要透過檔案來傳送data的話,可以使用@符號,或者你希望curl透過stdin讀資料進去可以使用 - 符號
讀檔的方式的話,則檔案內容必須已經是URL-encoded的狀態了。 範例 --data @foobar 從foobar中讀取post的資料。
content
=content
name=content
@filename
name@filename
-D, --dump-header <file> (常用)
寫入protocol headers的資料到檔案之中。
如果你想要儲存header的資料,則透過此命令寫入到檔案之中。
為什麼這個很常用,因為你可以透過這個方法馬上將Header裡面的Cookies直接讀入給下一個curl執行,藉由-b --cookie的選項
當然如果你只想要單純儲存Cookie,使用前面提到的-c, --cookie-jar就好了
--digest
啟動HTTP Digest authentication 透過這個才不會讓帳號密碼傳送的資料,以未加密的形式送出。
-u, --user option設定使用者和密碼
-e, --refer <URL>
傳送Referer Page給HTTP Server,這也可以透過-H, --header的方式傳送
當你同時有使用-L, --location時,可以直接透過在--referer URL後面再加上 ";auto"的字串,可以讓你自動利用前面的URL來當作refer的Location
-E, --cert <certificate[:password]>
當使用者想要get file from https時,希望可以附加上客戶端的憑證,憑證必須是PEM format確保檔案在傳送時是安全的。
假設這個憑證檔案就在當前目錄,則使用 ./certificate.pem 要加上prefix ./ 以避免錯誤 而且在指定憑證時如果名字含有 : 或 \
都需要使用 \ 來做跳脫字元, 像是\\ \: 以避免錯誤。
--engine <name>
選擇openSSL crypto engine 去操作cipher的動作,透過 --engine list 列出支援的引擎
--environement
(RISC OS ONLY)設定一個範圍的環境變數,以利更好操作curl
--egd-file <file>
選擇路徑名稱到Entropy Gathering Daemon socket,該檔案是為了random engine 的SSL connection
--cert-type <type>
指定憑證的formate,例如PEM DER ENG 預設則是PEM
--cacert <CA certificate>
SSL 告訴curl去使用指定的檔案去驗證 同樣的CA機構
file may contains multiple CA certificates. must be PEM format.
通常curl會認得環境變數中的CURL_CA_BUNDLE
預設都是使用這個路徑的CA,除非你使用這個選項,去Override它
Windows版本的話會去尋找curl-ca-bundle.crt,會在curl.exe的位置或者是當前的working directory 或者是任何在PATH的路徑
If curl is built against the NSS SSL library, the NSS PEM PKCS#11 module (libnsspem.so) needs to be available for this option to work properly.
--capath <CA certificate directory>
tells curl to use the specified certificate directory to verify the peer
-f, --fail
HTTP fail silently ( no output at all) on server errors.
this option make server prevent to show document error instead of return error 22
針對document是401 407 的response code 這個方法偶爾會失敗。
-F, --form <name=content>
用於模擬填入網頁表格的狀態
傳送的type為multipart/form-data
假設想要傳入的資料是file則也一樣使用@符號
這裡特別提到假設你只是要傳送file內的資料請使用 <
假設你要傳送的是整個檔案則使用 @ 它會被當成整個檔案上傳
Example
curl -F password=@/etc/passwd www.mypasswords.com
甚至可以使用type來指定要傳送的資料型態
curl -F "Web=@index.html;type=text/html" url.com
或者改變name field of a file
curl -F "file=@localfile;filename=nameinpost" url.com
假設檔案名字或路徑包含 , or ;
則需要用"" 包起來
curl -F "file=@\"localfile\";filename=\"nameinpost\"" url.com
--from-string <name=string>
使用這個選項可以避免--form含有複雜的@ <的符號, 這兩個符號在這裡皆不具有特殊意義
-G, --get使用這個會使所有的資料皆是以-d, --date or --date-binary的方式使用在HTTP GET的地方,而不是使用POST的方式
-i --include
Include the HTTP-header in the output. HTTP header會有server-name date of the document, http verion 等等
-I, --head
在http中,用於取得document內的header
在ftp/file時,顯示檔案的大小和修改的時間。
--interface <name>
讓你指定用哪張網卡去連線!!!
curl --interface enp0s3 http://www.netscape.com/
使用enp0s3去連netscape的網站
-j, --junk-session-cookies 當curl讀取新的cookies時,這個選項會丟棄所有的session cookies
就跟你把browser關閉,導致session關掉一樣。
-k, --insecure
讓curl進行不安全的SSL 連線,正常SSL如果安全連線不成功就會產生失敗,
透過這個指令讓所有的非安全連線都可以成功
-K, --config <config file>
-L, --location 重要
假設Server 回應3XX的response code說,http需要Redirect到哪邊去則會自動導向該網頁去。十分方便,
且會讓curl redo所帶的參數在新的網址上。
假設有使用-i, --include or -I, --head會把header全部顯示出來,假如需要認證,只能把原有的認證給初始的host,
而不能把認證傳給其他非你原本想要去的網站,以避免亂導向到其他網頁,而把重要資訊洩漏出去,
如果想要一併附帶則可以參考--location-trusted on how to change this.同時你也可以透過--max-redirs 去限制重導向的數量
避免無線輪迴。
note:假設redirect和request不是Get 而是POST or PUT,在http response code 是301 or 302 or 303,則它會傳送Get的訊息過去
除了上述之外的3XX,則將原本的post原封不動轉傳過去。 應該是為了安全性的問題。
Manual page curl line 770 ,curl的文檔比我想像中的還要多 共 2349 line 2019/01/25 未完待續
留言列表