Home A Linux HTTP client tool — curl的介紹及用法
Post
Cancel

A Linux HTTP client tool — curl的介紹及用法

做為一個HTTP client,想要對server發出請求,有許多做法,可能是寫一個python script 或使用其他任何語言,也可以是使用postman這樣的工具,或者是直接在command line上或shell script中使用curl指令.當你想要快速地測試一下某個API,或是explore別人的HTTP service時,直接使用curl是還蠻方便的!甚至直接用shell script來寫爬蟲了!

Outline

  • HTTP Request message
  • Curl 的許多參數及用法
  • 如何知道自己curl有沒有寫對
  • 其他常見搭配的用法及使用情境

curl

HTTP Request message

作為一個HTTP client,要送出一個request,我們先必須知道送出去的message到底會有哪些東西組成.

Request line

HTTP message的第一行,由method、URL、version所組成,例如:

1
GET /index.html HTTP/1.1

Header lines

第二行開始,每一行是為一個header,field及value由冒號隔開,例如

1
2
3
Host: www.google.com
Connection: Close
Accept-Language: en

body

Header結束空一行之後是為body,method是GET的就沒有body,例如你的表單POST的一些資料就會放在body,可能長這樣:

1
name=HoMu&phone=0912345678&email=homu@email.com

更多關於HTTP message的說明,可以看我之前寫過的文章:

[Networking] HTTP 簡介,以及使用telnet、nc、curl等指令來探索

Curl

所以我們要如何使用curl指令來產生HTTP message呢?!

基本

URL是必須的,什麼參數都沒有,就產生一個GET message

1
curl www.google.com

-X

設定你想要的method,例如你想要POST,如:

1
curl -X POST api.host.com/v1/users

-H

加上headers,用冒號隔開field及value,如果想要多個header就多打幾次-H,如:

1
2
3
4
curl -X POST \
     -H 'Content-Type: application/json' \
     -H 'X-Whatever-Field: value' \
     api.host.com/v1/users

-d

加上body,比如你想POST JSON string的data給你的API:

1
curl -X POST -H 'Content-Type: application/json' localhost:3000/api -d '{"name": "HoMu", "age": 30}'

如果你data很多,想在一個檔案裡頭,也可以使用指定檔案路徑的方式,可以為絕對路徑,也可以是相對的,路徑前必須加上@,例如:-d @./data.json

1
curl -X POST -H 'Content-Type: application/json' localhost:3000/api -d @FILEPATH

-i

按下Enter後,你得到會是server傳回來的body,如果你想要看response的header的話,要加上-i

-F

上傳檔案

利用nc指令看看自己到了傳了什麼

你可能寫了curl指令,不太確定用法,想知道到底curl形成出來的message是不是自己想要的格式,這時可以使用nc指令,在本機端起一個tcp server,在curl這個server,就可以看到HTTP的message囉.

nc監聽在port 3000

1
nc -l 3000

curl port 3000

1
curl localhost:3000

其他常見使用情況

redirect

當curl回來的資料是html時,直接在terminal上噴出一堆字也是很難看,這時長搭配redirect io,把回傳回來的html string寫到檔案裡,就可以用瀏覽器打開來了.

1
curl www.google.com > gg.html

jq

如果content-type是json的話,可以使用jq command幫你parse,不然一堆json string噴在螢幕上,也是眼花.

1
curl api.host.com/users | jq

Summary

今天簡單看了一下HTTP message的格式,以及如何用curl來做出自己想要的HTTP Request,並且知道自己到底有沒有寫對.

這是RESTful API一系列文章中的一篇,想了解更多關於RESTful API及HTTP的,可以看這篇目錄:

RESTful API Design — A practical guide

感謝您的閱讀~期待下次見!


參考資料

This post is licensed under CC BY 4.0 by the author.

HTTP 簡介,以及使用telnet、nc、curl等指令來探索

What are HTTP Methods?Which to use and How to use them correctly?

Comments powered by Disqus.