HTTP之請(qǐng)求與響應(yīng)

1. 請(qǐng)求

1.1 請(qǐng)求的格式

1 動(dòng)詞 路徑 協(xié)議/版本
2 Key1: value1
2 Key2: value2
2 Key3: value3
2 Content-Type: application/x-www-form-urlencoded
2 Host: www.baidu.com
2 User-Agent: curl/7.54.0
3
4 要上傳的數(shù)據(jù)

請(qǐng)求最多包含四部分,最少包含三部分。(也就是說(shuō)第四部分可以為空)
第三部分永遠(yuǎn)都是一個(gè)回車(\n)
動(dòng)詞有 GET POST PUT PATCH DELETE HEAD OPTIONS 等
這里的路徑包括「查詢參數(shù)」,但不包括「錨點(diǎn)」
如果你沒(méi)有寫路徑,那么路徑默認(rèn)為 /
第 2 部分中的 Content-Type 標(biāo)注了第 4 部分的格式

1.2 用Chrome發(fā)請(qǐng)求

  1. 右鍵 -> 檢查


  2. 以打開百度為例,在地址欄輸入www.baidu.com,回車

  3. 依次點(diǎn)開Network -> 百度 -> Headers -> Request Headers -> view source


  4. 這樣就可以看到打開百度所發(fā)送請(qǐng)求的頭部信息了


2. 響應(yīng)

2.1 響應(yīng)的格式

1 協(xié)議/版本號(hào) 狀態(tài)碼 狀態(tài)解釋
2 Key1: value1
2 Key2: value2
2 Content-Length: 17931
2 Content-Type: text/html
3
4 要下載的內(nèi)容

響應(yīng)也包括四部分
狀態(tài)碼反映了響應(yīng)狀態(tài),參考資料
Content-Type 標(biāo)注了第 4 部分的格式,且遵循 MIME 規(guī)范

2.2 用Chrome查看響應(yīng)

  1. 右鍵 -> 檢查
  2. 以打開百度為例,在地址欄輸入www.baidu.com,回車
  3. 依次點(diǎn)開Network -> 百度 -> Headers -> Response Headers -> view source


  4. 點(diǎn)擊Response可以查看具體響應(yīng)的內(nèi)容


3. curl命令

  • cURL命令是一個(gè)利用URL規(guī)則在命令行下工作的文件傳輸工具。它支持文件的上傳和下載,所以是綜合傳輸工具,但按傳統(tǒng),習(xí)慣稱curl為下載工具。作為一款強(qiáng)力工具,curl支持包括HTTP、HTTPS、ftp等眾多協(xié)議,還支持POST、cookies、認(rèn)證、從指定偏移處下載部分文件、用戶代理字符串、限速、文件大小、進(jìn)度條等特征。做網(wǎng)頁(yè)處理流程和數(shù)據(jù)檢索自動(dòng)化,curl可以祝一臂之力。

  • 語(yǔ)法

curl(選項(xiàng))(參數(shù))
  • 選項(xiàng)
選項(xiàng) 功能
-a/--append 上傳文件時(shí),附加到目標(biāo)文件
-A/--user-agent <string> 設(shè)置用戶代理發(fā)送給服務(wù)器
-anyauth 可以使用“任何”身份驗(yàn)證方法
-b/--cookie <name=string/file> cookie字符串或文件讀取位置
--basic 使用HTTP基本驗(yàn)證
-B/--use-ascii 使用ASCII /文本傳輸
-c/--cookie-jar <file> 操作結(jié)束后把cookie寫入到這個(gè)文件中
-C/--continue-at <offset> 斷點(diǎn)續(xù)轉(zhuǎn)
-d/--data <data> HTTP POST方式傳送數(shù)據(jù)
--data-ascii <data> 以ascii的方式post數(shù)據(jù)
--data-binary <data> 以二進(jìn)制的方式post數(shù)據(jù)
--negotiate 使用HTTP身份驗(yàn)證
--digest 使用數(shù)字身份驗(yàn)證
--disable-eprt 禁止使用EPRT或LPRT
--disable-epsv 禁止使用EPSV
-D/--dump-header <file> 把header信息寫入到該文件中
--egd-file <file> 為隨機(jī)數(shù)據(jù)(SSL)設(shè)置EGD socket路徑
--tcp-nodelay 使用TCP_NODELAY選項(xiàng)
-e/--referer 來(lái)源網(wǎng)址
-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 要求返回是壓縮的形勢(shì) (using deflate or gzip)
--connect-timeout <seconds> 設(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 來(lái)進(jìn)行ftp數(shù)據(jù)傳輸
--ftp-ssl-reqd 要求用 SSL/TLS 來(lái)進(jìn)行ftp數(shù)據(jù)傳輸
-F/--form <name=content> 模擬http表單提交數(shù)據(jù)
--form-string <name=string> 模擬http表單提交數(shù)據(jù)
-g/--globoff 禁用網(wǎng)址序列和范圍使用{}和[]
-G/--get 以get的方式來(lái)發(fā)送數(shù)據(jù)
-H/--header <line> 自定義頭信息傳遞給服務(wù)器
--ignore-content-length 忽略的HTTP頭信息的長(zhǎng)度
-i/--include 輸出時(shí)包括protocol頭信息
-I/--head 只顯示請(qǐng)求頭信息
-j/--junk-session-cookies 讀取文件進(jìn)忽略session cookie
--interface <interface> 使用指定網(wǎng)絡(luò)接口/地址
--krb4 <level> 使用指定安全級(jí)別的krb4
-k/--insecure 允許不使用證書到SSL站點(diǎn)
-K/--config 指定的配置文件讀取
-l/--list-only 列出ftp目錄下的文件名稱
--limit-rate <rate> 設(shè)置傳輸速度
--local-port<NUM> 強(qiáng)制使用本地端口號(hào)
-m/--max-time <seconds> 設(shè)置最大傳輸時(shí)間
--max-redirs <num> 設(shè)置最大讀取的目錄數(shù)
--max-filesize <bytes> 設(shè)置最大下載的文件總量
-M/--manual 顯示全手動(dòng)
-n/--netrc 從netrc文件中讀取用戶名和密碼
--netrc-optional 使用 .netrc 或者 URL來(lái)覆蓋-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 <address> 使用端口地址,而不是使用PASV
-q 作為第一個(gè)參數(shù),關(guān)閉 .curlrc
-Q/--quote <cmd> 文件傳輸前,發(fā)送命令到服務(wù)器
-r/--range <range> 檢索來(lái)自HTTP/1.1或FTP服務(wù)器字節(jié)范圍
--range-file 讀?。⊿SL)的隨機(jī)文件
-R/--remote-time 在本地生成文件時(shí),保留遠(yuǎn)程文件時(shí)間
--retry <num> 傳輸出現(xiàn)問(wèn)題時(shí),重試的次數(shù)
--retry-delay <seconds> 傳輸出現(xiàn)問(wèn)題時(shí),設(shè)置重試間隔時(shí)間
--retry-max-time <seconds> 傳輸出現(xiàn)問(wèn)題時(shí),設(shè)置最大重試時(shí)間
-s/--silent 靜默模式。不輸出任何東西
-S/--show-error 顯示錯(cuò)誤
--socks4 <host[:port]> 用socks4代理給定主機(jī)和端口
--socks5 <host[:port]> 用socks5代理給定主機(jī)和端口
--stderr <file>
-t/--telnet-option <OPT=val> Telnet選項(xiàng)設(shè)置
--trace <file> 對(duì)指定文件進(jìn)行debug
--trace-ascii <file> Like --跟蹤但沒(méi)有hex輸出
--trace-time 跟蹤/詳細(xì)輸出時(shí),添加時(shí)間戳
-T/--upload-file <file> 上傳文件
--url <URL> Spet URL to work with
-u/--user <user[:password]> 設(shè)置服務(wù)器的用戶和密碼
-U/--proxy-user <user[:password]> 設(shè)置代理用戶名和密碼
-w/--write-out [format] 什么輸出完成后
-x/--proxy <host[:port]> 在給定的端口上使用HTTP代理
-X/--request <command> 指定什么命令
-y/--speed-time 放棄限速所要的時(shí)間,默認(rèn)為30
-Y/--speed-limit 停止傳輸速度的限制,速度時(shí)間
  • 示例
  1. 簡(jiǎn)單下載頁(yè)面
curl https://www.baidu.com
  1. get請(qǐng)求
curl -s -v -H "dog: black"  https://www.baidu.com

查看到請(qǐng)求信息如下


其中 -s 即silent,不顯示進(jìn)度
-v為顯示請(qǐng)求詳細(xì)信息
-H為加入頭部信息,必須是"key: value"的格式,可以添加host、cookie等key

  1. post請(qǐng)求
curl -X POST -s -v -H "xx: xxx" https://www.baidu.com

-X為添加命令,這里添加post命令

還可以用-d上傳數(shù)據(jù)

curl -X POST -d "hello world" -s -v -H "xx: xxx" https://www.baidu.com
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容