Linux 命令 curl 的用法及參數解析


what's the curl

  curl 是常用的命令行工具,用來請求 Web 服務器。它的名字就是客戶端(client)的 URL 工具的意思。

  curl 的功能非常強大,命令行參數多達幾十種。如果熟練的話,完全可以取代 Postman 這一類的圖形界面工具。

 

參數

  • 不帶參數:發出 GET 請求
    curl https://www.example.com
  • -A:指定客戶端的用戶代理標頭,即 User-Agent。curl 的默認用戶代理字符串是curl/[version]
    curl -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' https://google.com
    帶上代理頭
  • -b:向服務器發送 Cookie
    # 向服務器發送一個名為foo、值為bar的 Cookie
    curl -b 'foo=bar' https://google.com
    
    # 發送兩個 Cookie
    curl -b 'foo1=bar;foo2=bar2' https://google.com
    
    # 讀取本地文件cookies.txt,里面是服務器設置的 Cookie(參見-c參數)
    curl -b cookies.txt https://www.google.com
    View Code
  • -c:將服務器設置的 Cookie 寫入一個文件
    # 將服務器的 HTTP 回應所設置 Cookie 寫入文本文件cookies.txt
    curl -c cookies.txt https://www.google.com
    View Code
  • -d:發送 POST 請求的數據體,使用 -d 參數以后,HTTP 請求會自動加上標頭 Content-Type : application/x-www-form-urlencoded。並且會自動將請求轉為 POST 方法,因此可以省略-X POST。
    $ curl -d'login=emma&password=123'-X POST https://google.com/login
    # 或者
    $ curl -d 'login=emma' -d 'password=123' -X POST  https://google.com/login
    
    # 讀取本地文本文件的數據,向服務器發送
    curl -d '@data.txt' https://google.com/login
    View Code
  • -data-urlencode:等同於-d,發送 POST 請求的數據體,區別在於會自動將發送的數據進行 URL 編碼
    # 發送的數據hello world之間有一個空格,需要進行 URL 編碼
    curl --data-urlencode 'comment=hello world' https://google.com/login
    View Code
  • -e:用來設置 HTTP 的標頭Referer,表示請求的來源
    # 將Referer標頭設為https://google.com?q=example
    curl -e 'https://google.com?q=example' https://www.example.com
    View Code
  • -F:用來向服務器上傳二進制文件,可以指定 MIME 類型,也可以指定文件名
    # 向服務器上傳二進制文件
    curl -F 'file=@photo.png' https://google.com/profile
    
    # 指定 MIME 類型, MIME 類型為image/png
    curl -F 'file=@photo.png;type=image/png' https://google.com/profile
    
    # 指定文件名:原始文件名為photo.png,但是服務器接收到的文件名為me.png。
    curl -F 'file=@photo.png;filename=me.png' https://google.com/profile
    View Code
  • -G:用來構造 URL 的查詢字符串
    # GET 請求,實際請求的 URL 為https://google.com/search?q=kitties&count=20。如果省略-G,會發出一個 POST 請求
    curl -G -d 'q=kitties' -d 'count=20' https://google.com/search
    
    結合--data--urlencode參數進行 URL 編碼
    curl -G --data-urlencode 'comment=hello world' https://www.example.com
    View Code
  • -H:添加 HTTP 請求的標頭
    # 添加 HTTP 標頭Accept-Language: en-US
    curl -H 'Accept-Language: en-US' https://google.com
    
    # 添加兩個 HTTP 標頭
    curl -H 'Accept-Language: en-US' -H 'Secret-Message: xyzzy' https://google.com
    
    # 添加 HTTP 請求的標頭是Content-Type: application/json,然后用-d參數發送 JSON 數據
    curl -d '{"login": "emma", "pass": "123"}' -H 'Content-Type: application/json' https://google.com/login
    View Code
  • -i:打印出服務器回應的 HTTP 標頭
    # 收到服務器回應后,先輸出服務器回應的標頭,然后空一行,再輸出網頁的源碼
    curl -i https://www.example.com
    View Code
  • -l:向服務器發出 HEAD 請求,然會將服務器返回的 HTTP 標頭打印出來。等同於--head參數
  • -k:指定跳過 SSL 檢測
  • -L:會讓 HTTP 請求跟隨服務器的重定向。curl 默認不跟隨重定向
  • --limit-rate:用來限制 HTTP 請求和回應的帶寬,模擬慢網速的環境
    # 將帶寬限制在每秒 200K 字節
     curl --limit-rate 200k https://google.com
    View Code
  • -o:將服務器的回應保存成文件,等同於wget命令
  • -O:將服務器回應保存成文件,並將 URL 的最后部分當作文件名
  • -s:不輸出錯誤和進度信息
  • -S:指定只輸出錯誤信息,通常與-s一起使用
  • -u:用來設置服務器認證的用戶名和密碼
    # 設置用戶名為bob,密碼為12345,然后將其轉為 HTTP 標頭Authorization: Basic Ym9iOjEyMzQ1。
    curl -u 'bob:12345' https://google.com/login
    
    # 能夠識別 URL 里面的用戶名和密碼,將其轉為上個例子里面的 HTTP 標頭
    curl https://bob:12345@google.com/login
    
    # 只設置用戶名,執行后,curl 會提示用戶輸入密碼
    curl -u 'bob' https://google.com/login
    View Code
  • -v:輸出通信的整個過程,用於調試。--trace參數也可以用於調試,還會輸出原始的二進制數據
  • -x:指定 HTTP 請求的代理
    # 指定 HTTP 請求通過myproxy.com:8080的 socks5 代理發出
    curl -x socks5://james:cats@myproxy.com:8080 https://www.example.com
    View Code
  • -X:指定 HTTP 請求的方法
    # 發出 POST 請求
    curl -X POST https://www.example.com
    View Code

     

 

 

 

 

 

 

                              


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM