close

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   未完待續

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

arrow
arrow
    全站熱搜

    蕭瑞文 發表在 痞客邦 留言(0) 人氣()