curl說明
https://baike.baidu.com/item/curl/10098606?fr=aladdin
curl是利用 URL語(yǔ)法在命令行方式下工作的開源文件傳輸工具。它被廣泛應(yīng)用在 Unix、多種 Linux發(fā)行版中,并且有 DOS和 Win32、Win64下的移植版本。
目錄
1 設(shè)計(jì)方法
? 獲得頁(yè)面
? 獲取表單
? 使用PUT
? 有關(guān)認(rèn)證
? 引用
? 指定用戶端
? COOKIES
? 加密HTTP
? http認(rèn)證
? 注意事項(xiàng)
2 命令
3 相關(guān)函數(shù)
設(shè)計(jì)方法
獲得頁(yè)面
使用命令:curl http://curl.haxx.se
這是最簡(jiǎn)單的使用方法。用這個(gè)命令獲得了http://curl.haxx.se指向的頁(yè)面,同樣,如果這里的URL指向的是一個(gè)文件或者一幅圖都可以直接下載到本地。如果下載的是HTML文檔,那么缺省的將不顯示文件頭部,即HTML文檔的header。要全部顯示,請(qǐng)加參數(shù) -i,要只顯示頭部,用參數(shù) -I。任何時(shí)候,可以使用 -v 命令看curl是怎樣工作的,它向服務(wù)器發(fā)送的所有命令都會(huì)顯示出來。為了 斷點(diǎn)續(xù)傳,可以使用-r參數(shù)來指定傳輸范圍。
獲取表單
在WEB頁(yè)面設(shè)計(jì)中,form是很重要的元素。Form通常用來收集并向網(wǎng)站提交信息。提交信息的方法有兩種,GET方法和POST方法。先討論GET方法,例如在頁(yè)面中有這樣一段:
那么瀏覽器上會(huì)出現(xiàn)一個(gè)文本框和一個(gè)標(biāo)為“OK”的按鈕。按下這個(gè)按鈕, 表單就用GET方法向服務(wù)器提交文本框的數(shù)據(jù)。
例如原始頁(yè)面是在 www.hotmail. com/when/birth.html看到的,然后您在文本框中輸入1905,然后按OK按鈕,那么瀏覽器的URL現(xiàn)在應(yīng)該是:“www.hotmail. com/when/junk.cgi?birthyear=1905&press=OK”
對(duì)于這種網(wǎng)頁(yè),curl可以直接處理,例如想獲取上面的網(wǎng)頁(yè),只要輸入:
curl "www.hotmail. com/when/junk.cgi?birthyear=1905&press=OK"
就可以了。
表單用來提交信息的第二種方法叫做POST方法,POST方法和GET方法的區(qū)別在于GET方法使用的時(shí)候,瀏覽器中會(huì)產(chǎn)生目標(biāo)URL,而POST不會(huì)。類似GET,這里有一個(gè)網(wǎng)頁(yè):
瀏覽器上也會(huì)出現(xiàn)一個(gè)文本框和一個(gè)標(biāo)為“OK”的按鈕。按下這個(gè)按鈕, 表單用POST方法向服務(wù)器提交數(shù)據(jù)。
這時(shí)的URL是看不到的,因此需要使用特殊的方法來抓取這個(gè)頁(yè)面:
curl -d "birthyear=1905&press=OK" www.hotmail. com/when/junk.cgi
這個(gè)命令就可以做到。
1995年年末,RFC 1867定義了一種新的POST方法,用來上傳文件。主要用于把本地文件上傳到服務(wù)器。此時(shí)頁(yè)面是這樣寫的:
對(duì)于這種頁(yè)面,curl的用法不同:
curl -F upload=@localfilename -F press=OK URL
這個(gè)命令的實(shí)質(zhì)是將本地的文件用POST上傳到服務(wù)器。
有關(guān)POST還有不少用法,用戶可以自己摸索。
使用PUT
HTTP協(xié)議文件上傳的標(biāo)準(zhǔn)方法是使用PUT,此時(shí)curl命令使用-T參數(shù):
curl -T uploadfile www.uploadhttp. com/receive.cgi
有關(guān)認(rèn)證
curl可以處理各種情況的認(rèn)證頁(yè)面,例如下載用戶名/密碼認(rèn)證方式的頁(yè)面(在IE中通常是出現(xiàn)一個(gè)輸入用戶名和密碼的輸入框):
curl -u name:password www.secrets. com
如果網(wǎng)絡(luò)是通過http 代理服務(wù)器出去的,而代理服務(wù)器需要用戶名和密碼,那么輸入:
curl -U proxyuser:proxypassword http://curl.haxx. se
任何需要輸入用戶名和密碼的時(shí)候,只在參數(shù)中指定用戶名而空著密碼,curl可以交互式的讓用戶輸入密碼。
引用
有些網(wǎng)絡(luò)資源訪問的時(shí)候必須經(jīng)過另外一個(gè)網(wǎng)絡(luò)地址跳轉(zhuǎn)過去,這用術(shù)語(yǔ)來說是:referer,引用。
對(duì)于這種地址的資源,curl也可以下載:
curl -e http://curl.haxx. se daniel.haxx. se
指定用戶端
有些網(wǎng)絡(luò)資源首先需要判斷用戶使用的是什么瀏覽器,符合標(biāo)準(zhǔn)了才能夠下載或者瀏覽。
此時(shí)curl可以把自己“偽裝”成任何其他瀏覽器:
curl -A "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" URL
這個(gè)指令表示curl偽裝成了IE5.0,用戶平臺(tái)是Windows 2000。(對(duì)方服務(wù)器是根據(jù)這個(gè)字串來判斷客戶端的類型的,所以即使使用AIX也無所謂)。
使用:
curl -A "Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)" URL
此時(shí)curl變成了Netscape,運(yùn)行在PIII平臺(tái)的Linux上了。
COOKIES
Cookie是服務(wù)器經(jīng)常使用的一種記憶客戶信息的方法。如果cookie被記錄在了文件中,那么使用命令:
curl -b stored_cookies_in_file www.cookiesite. com
curl可以根據(jù)舊的cookie寫出新cookie并發(fā)送到網(wǎng)站:
curl -b cookies.txt -c newcookies.txt www.cookiesite. com
加密HTTP
如果是通過OpenSSL加密的https協(xié)議傳輸?shù)木W(wǎng)頁(yè),curl可以直接訪問:
curl https://that.secure.server. com
http認(rèn)證
如果是采用證書認(rèn)證的http地址,證書在本地,那么curl這樣使用:
curl -E mycert.pem https://that.secure.server. com
注意事項(xiàng)
curl非常博大,用戶要想使用好這個(gè)工具,除了詳細(xì)學(xué)習(xí)參數(shù)之外,還需要深刻理解http的各種協(xié)議與URL的各個(gè)語(yǔ)法。
這里推薦幾個(gè)讀物:
RFC 2616 HTTP協(xié)議語(yǔ)法的定義。
RFC 2396 URL語(yǔ)法的定義。
RFC 2109 Cookie是怎樣工作的。
RFC 1867 HTTP如何POST,以及POST的格式。
命令
linux curl命令
-a/--append 上傳文件時(shí),附加到目標(biāo)文件
-A/--user-agent 設(shè)置用戶代理發(fā)送給服務(wù)器
- anyauth 可以使用“任何”身份驗(yàn)證方法
-b/--cookie 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信息寫入到該文件中
--egd-file 為隨機(jī)數(shù)據(jù)(SSL)設(shè)置EGD socket路徑
--tcp-nodelay 使用TCP_NODELAY選項(xiàng)
-e/--referer 來源網(wǎng)址
-E/--cert 客戶端證書文件和密碼 (SSL)
--cert-type 證書文件類型 (DER/PEM/ENG) (SSL)
--key 私鑰文件名 (SSL)
--key-type 私鑰文件類型 (DER/PEM/ENG) (SSL)
--pass 私鑰密碼 (SSL)
--engine 加密引擎使用 (SSL). "--engine list" for list
--cacert CA證書 (SSL)
--capath CA目錄 (made using c_rehash) to verify peer against (SSL)
--ciphers SSL密碼
--compressed 要求返回是壓縮的形勢(shì) (using deflate or gzip)
--connect-timeout 設(shè)置最大請(qǐng)求時(shí)間
--create-dirs 建立本地目錄的目錄層次結(jié)構(gòu)
--crlf 上傳是把LF轉(zhuǎn)變成CRLF
-f/--fail 連接失敗時(shí)不顯示http錯(cuò)誤
--ftp-create-dirs 如果遠(yuǎn)程目錄不存在,創(chuàng)建遠(yuǎn)程目錄
--ftp-method [multicwd/nocwd/singlecwd] 控制CWD的使用
--ftp-pasv 使用 PASV/EPSV 代替端口
--ftp-skip-pasv-ip 使用PASV的時(shí)候,忽略該IP地址
--ftp-ssl 嘗試用 SSL/TLS 來進(jìn)行ftp數(shù)據(jù)傳輸
--ftp-ssl-reqd 要求用 SSL/TLS 來進(jìn)行ftp數(shù)據(jù)傳輸
-F/--form 模擬http表單提交數(shù)據(jù)
-form-string 模擬http表單提交數(shù)據(jù)
-g/--globoff 禁用網(wǎng)址序列和范圍使用{}和[]
-G/--get 以get的方式來發(fā)送數(shù)據(jù)
-h/--help 幫助
-H/--header 自定義頭信息傳遞給服務(wù)器
--ignore-content-length 忽略的HTTP頭信息的長(zhǎng)度
-i/--include 輸出時(shí)包括protocol頭信息
-I/--head 只顯示文檔信息
從文件中讀取-j/--junk-session-cookies忽略會(huì)話Cookie
- 界面指定網(wǎng)絡(luò)接口/地址使用
- krb4 <級(jí)別>啟用與指定的安全級(jí)別krb4
-j/--junk-session-cookies 讀取文件進(jìn)忽略session cookie
--interface 使用指定網(wǎng)絡(luò)接口/地址
--krb4 使用指定安全級(jí)別的krb4
-k/--insecure 允許不使用證書到SSL站點(diǎn)
-K/--config 指定的配置文件讀取
-l/--list-only 列出ftp目錄下的文件名稱
--limit-rate 設(shè)置傳輸速度
--local-port 強(qiáng)制使用本地端口號(hào)
-m/--max-time 設(shè)置最大傳輸時(shí)間
--max-redirs 設(shè)置最大讀取的目錄數(shù)
--max-filesize 設(shè)置最大下載的文件總量
-M/--manual 顯示全手動(dòng)
-n/--netrc 從netrc文件中讀取用戶名和密碼
--netrc-optional 使用 .netrc 或者 URL來覆蓋-n
--ntlm 使用 HTTP NTLM 身份驗(yàn)證
-N/--no-buffer 禁用緩沖輸出
-o/--output 把輸出寫到該文件中
-O/--remote-name 把輸出寫到該文件中,保留遠(yuǎn)程文件的文件名
-p/--proxytunnel 使用HTTP代理
--proxy-anyauth 選擇任一代理身份驗(yàn)證方法
--proxy-basic 在代理上使用基本身份驗(yàn)證
--proxy-digest 在代理上使用數(shù)字身份驗(yàn)證
--proxy-ntlm 在代理上使用ntlm身份驗(yàn)證
-P/--ftp-port
-Q/--quote 文件傳輸前,發(fā)送命令到服務(wù)器
-r/--range 檢索來自HTTP/1.1或FTP服務(wù)器字節(jié)范圍
--range-file 讀取(SSL)的隨機(jī)文件
-R/--remote-time 在本地生成文件時(shí),保留遠(yuǎn)程文件時(shí)間
--retry 傳輸出現(xiàn)問題時(shí),重試的次數(shù)
--retry-delay 傳輸出現(xiàn)問題時(shí),設(shè)置重試間隔時(shí)間
--retry-max-time 傳輸出現(xiàn)問題時(shí),設(shè)置最大重試時(shí)間
-s/--silent靜音模式。不輸出任何東西
-S/--show-error 顯示錯(cuò)誤
--socks4 用socks4代理給定主機(jī)和端口
--socks5 用socks5代理給定主機(jī)和端口
--stderr
-t/--telnet-option Telnet選項(xiàng)設(shè)置
--trace 對(duì)指定文件進(jìn)行debug
--trace-ascii Like --跟蹤但沒有hex輸出
--trace-time 跟蹤/詳細(xì)輸出時(shí),添加時(shí)間戳
-T/--upload-file 上傳文件
--url Spet URL to work with
-u/--user 設(shè)置服務(wù)器的用戶和密碼
-U/--proxy-user 設(shè)置代理用戶名和密碼
-v/--verbose
-V/--version 顯示版本信息
-w/--write-out [format]什么輸出完成后
-x/--proxy 在給定的端口上使用HTTP代理
-X/--request 指定什么命令
-y/--speed-time 放棄限速所要的時(shí)間。默認(rèn)為30
-Y/--speed-limit 停止傳輸速度的限制,速度時(shí)間'秒
-z/--time-cond 傳送時(shí)間設(shè)置
-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,進(jìn)行第三方傳送
--3p-user 使用用戶名和密碼,進(jìn)行第三方傳送
-4/--ipv4 使用IP4
-6/--ipv6 使用IP6
-#/--progress-bar 用進(jìn)度條顯示當(dāng)前的傳送狀態(tài)
相關(guān)函數(shù)
PHP cURL 函數(shù)
PHP [1] ? 支持的由Daniel Stenberg創(chuàng)建的libcurl庫(kù)允許你與各種的服務(wù)器使用各種類型的協(xié)議進(jìn)行連接和通訊。
libcurl支持 http、 https、 ftp、 gopher、 telnet、dict、 file和 ldap協(xié)議。libcurl同時(shí)也支持HTTPS認(rèn)證、HTTP POST、HTTP PUT、 FTP 上傳(這個(gè)也能通過PHP的FTP擴(kuò)展完成)、HTTP 基于表單的上傳、代理、cookies和用戶名+密碼的認(rèn)證。
PHP中使用cURL實(shí)現(xiàn)Get和Post請(qǐng)求的方法
這些函數(shù)在PHP 4.0.2中被引入。
以下包含了PHP cURL函數(shù)列表:
下載管理程式
HTTP 網(wǎng)絡(luò)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。