<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # [curl命令與HTTP請求](https://segmentfault.com/a/1190000019869209) ![](https://avatar-static.segmentfault.com/300/741/3007410968-5c088f40acc6a_huge128) # curl介紹 > `curl`是一個運行在命令行的 http 客戶端。使用`curl`命令可以發起 http 請求并返回結果。 相信很多開發者都喜歡使用圖形化界面工具(例如[Postman](https://link.segmentfault.com/?enc=NueG7nS6%2B2iAJwHWSCLFig%3D%3D.TksQez1kozLtQFz1mXxxRXD31lX5wh4PGt%2FM62%2BaU1s%3D))來進行 API 的調試。但是我覺得了解`curl`命令行工具,會給開發帶來很大的幫助,可以讓開發者更直觀地了解 http 請求,也方便了開發過程中的溝通與交流。 # curl的使用 > 注意:Windows 系統是沒有`curl`命令的,要想 Windows 中使用它,可以使用[Git Bash](https://link.segmentfault.com/?enc=VPJDKMeGvACA4eqJVceerw%3D%3D.1n3rNWYmnUfEcmps6SIXk7sstxzMDFsYQQ1TZeJXYSDr809JU%2FdMuGwXsZ8m%2B9J3)或者[Cygwin](https://link.segmentfault.com/?enc=2aaL3QYen5ZHeSuLNT6ZcQ%3D%3D.N7ZcSeOaHy4YUvNThczdJ0VpZnD3MLU6gJocWO7trIE%3D)。 ~~~bash curl [options] [URL...] ~~~ 先來嘗試一下不加任何參數請求百度首頁和[一言 API](https://link.segmentfault.com/?enc=uQzpZ5%2B066w5QxIYQaITbA%3D%3D.zeiJLJb59B5J1Lsv1CAc9GUTVjjElEcKdpTZHD8JrGE%3D)。 ~~~bash curl https://www.baidu.com ~~~ ![圖片描述](https://segmentfault.com/img/bVbvwzc?w=760&h=302 "圖片描述") ~~~bash curl https://v1.hitokoto.cn/ ~~~ ![圖片描述](https://segmentfault.com/img/bVbvwBR?w=475&h=171 "圖片描述") 可以看到返回的信息都是一串文本(字符串)。當所請求的內容是html(百度首頁)時返回html文本;當請求的內容是JSON API(一言 API)時返回JSON文本。在瀏覽器中,瀏覽器便是根據這文本內容來進行頁面渲染。 不加任何參數使用`curl`命令只是返回http的`響應正文`內容(后面有提到),如果要想查看完整的http請求信息可以加上`-v`參數。 ~~~bash curl -v https://v1.hitokoto.cn/ ~~~ ![圖片描述](https://segmentfault.com/img/bVbvwGo?w=557&h=470 "圖片描述") 此時http請求的完整信息被打印出來,這些信息便是http的`請求報文`和`響應報文`。 # HTTP請求 HTTP請求可以看成向服務器發送字符串,服務器收到后返回字符串的過程。向服務器發送的字符串稱為`請求報文`,而服務器返回的字符串稱為`響應報文`。 ### 請求報文 一個HTTP請求報文由`請求行`、`請求頭`、`空行`和`請求數據`4個部分組成。 * 請求行 請求行由請求方法、URL和HTTP協議版本組成。例如,GET /index.html HTTP/1.1。 HTTP的請求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。 * 請求頭 請求頭由鍵/值對組成,每行一對,鍵與值之間用冒號分隔。常見的請求頭有: User-Agent:產生請求的瀏覽器類型。 Accept:客戶端可識別的內容類型列表。 Host:請求的主機名。 * 空行 最后一個請求頭之后是一個空行,發送回車符和換行符,通知服務器以下不再有請求頭。 * 請求數據 請求數據不在GET方法中使用,而是在POST方法中使用。 ### 響應報文 響應報文由`狀態行`、`響應頭`和`響應正文`3個部分組成。 * 狀態行 返回HTTP狀態碼來說明所請求的資源情況。 常見的狀態碼有 200 OK(請求成功),403 Forbidden(服務器收到請求,但是拒絕提供服務),404 Not Found(請求資源不存在)。 * 響應頭 響應頭和請求頭一樣,由鍵/值對組成,每行一對,鍵與值之間用冒號分隔。 * 響應正文 響應的正文內容,也就是上面所說的當`curl`命令不加`-v`參數時返回的內容。 在上面的例子中它們的具體位置如下 ~~~nestedtext > GET / HTTP/1.1 (請求行) > Host: v1.hitokoto.cn (請求頭) > User-Agent: curl/7.64.0 (請求頭) > Accept: */* (請求頭) > (空行) < HTTP/1.1 200 OK (狀態行) < Date: Thu, 25 Jul 2019 01:51:45 GMT (下面都是響應頭) < Content-Type: application/json; charset=utf-8 < Content-Length: 182 < Connection: keep-alive < X-Request-Id: 0b8927ab-47be-4e61-8c0e-04acfbe81bb4 < X-DNS-Prefetch-Control: off < X-Frame-Options: SAMEORIGIN < Strict-Transport-Security: max-age=15552000; includeSubDomains < X-Download-Options: noopen < X-Content-Type-Options: nosniff < X-XSS-Protection: 1; mode=block < X-Via: 1.1 PSgxnndx7ba44:7 (Cdn Cache Server V2.0) < (下面是響應正文) { "id": 708, "hitokoto": "彼方為誰,無我有問 ;九月露濕,待君之前", "type": "a", "from": "你的名字", "creator": "moe", "created_at": "1477825585" }* Connection #0 to host v1.hitokoto.cn left intact ~~~ # curl命令的常用參數 `curl`命令的常用參數有: * \-X // 設置請求方法 * \-H // 設置請求頭 * \-D // 設置請求數據(POST方法) 例子: ~~~bash curl 'https://v1.hitokoto.cn/' -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36' -H 'Cookie: _ga=GA1.2.303411826.1562744042' -D 'c=b' ~~~ 上面的例子表示 * 用`POST`請求`https://v1.hitokoto.cn/`,由于添加了`-D`參數,所以`-X POST`參數可以不寫 * 添加了兩個`請求頭`,分別是`User-Agent`,和`Cookie` * 添加了一個`請求數據`,`c=b`。若`請求數據`有多個時,用`&`連接。 另外,在現代瀏覽器的開發者工具中,有一個很方便的功能,可以復制所請求的`curl`命令。 ![圖片描述](https://segmentfault.com/img/bVbvw00?w=1126&h=962 "圖片描述") 復制出來的結果: ~~~bash curl 'https://v1.hitokoto.cn/' -H 'Connection: keep-alive' -H 'Cache-Control: max-age=0' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: zh-CN,zh;q=0.9' -H 'Cookie: _ga=GA1.2.303411826.1562744042' --compressed ~~~ 當調試 api 接口出現問題時,我們就可以直接發送這段命令給其他開發者,只需粘貼到終端運行,便能知道問題所在,可以說是相當的方便。 > 參考資料 * [一次完整的HTTP請求所經歷的7個步驟](https://link.segmentfault.com/?enc=S0zChWLUqxpIWgCEQIBrbw%3D%3D.dP0LRiz%2BB6jI8L03Rr6dTP9DDwu4iF2U7V1PK47nvrxANIflzlpBeHO3llPAnOwW)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看