cURL簡介:高級程序員都在用的工具
在本教程中,我們介紹cURL的基本選項,并通過示例介紹如何使用它們,然后我們開發(fā)了一個帶有三個端點的Node/Express服務(wù)器,以演示如何使用本文介紹的cURL選項對服務(wù)器執(zhí)行cURL的GET/POST請求。
與cURL一起使用的選項很多,我們在此介紹的是可用于快速測試API端點的基本選項。
介紹
cURL是一種用于從服務(wù)器傳輸數(shù)據(jù)或向服務(wù)器傳輸數(shù)據(jù)的傳輸工具。它支持各種互聯(lián)網(wǎng)傳輸協(xié)議,包括:
- DICT
 - FILE
 - FTP, FTPS
 - GOPHER
 - HTTP, HTTPS
 - IMAP, IMAPS
 - LDAP, LDAPS
 - POP3, POP3S
 - RTMP, RTSP
 - SCP, SFTP
 - SMB, SMBS
 - SMTP, SMTPS
 - TELNET and TFTP
 
我們可以使用cURL執(zhí)行一些有用的技巧,如代理支持、用戶身份驗證、FTP上傳、HTTP post、SSL連接、cookie、文件傳輸恢復(fù)、Metalink等等。
cURL是在命令行中使用的,在軟件開發(fā)過程中,它主要是用來快速測試API的。當(dāng)我想在Node.js服務(wù)器中測試我所有的API時,我個人使用cURL。對于開發(fā)者來說,這是一個非常方便的工具。
| 
             Postman很酷,但是cURL非???。 – Chidume Nnamdi  | 
        
在本文中,我們將介紹基本的cURL函數(shù)和選項。我們還將學(xué)習(xí)如何使用cURL在API端點上執(zhí)行GET,POST請求。
cURL選項
(1) --request 或者 -X
—request 和 -X 指定與HTTP服務(wù)器通信時可以使用的自定義請求方法,將使用指定的請求方法代替其他方法(默認(rèn)為GET)。
要執(zhí)行POST請求:
- curl --request POST
 
要執(zhí)行GET請求:
- curl --request GET
 
(2) --url
這指定了我們將獲取或傳輸數(shù)據(jù)的URL,當(dāng)你想在配置文件中指定URL時,這個選項非常方便。
如果給定的URL缺少scheme name(例如“http://””或“ftp://””等),則cURL將基于主機進行猜測。
如果最外面的子域名與DICT,F(xiàn)TP,IMAP,LDAP,POP3或SMTP匹配,則將使用該協(xié)議。否則,將使用HTTP。
例如,如果你想在本地服務(wù)器上的 localhost:3000 上執(zhí)行GET請求,則需要將 --url 設(shè)置為 localhost:3000:
- curl --request GET \
 - --url http://localhost:3000
 
要在同一URL上執(zhí)行POST:
- curl --request POST \
 - --url http://localhost:3000
 
注意:反斜杠 \ 用于分隔cURL中的選項。
對于外部API,還是一樣。
假設(shè)你要從https://moviesdb.com/movies/all獲取電影列表。
- curl --request GET \
 - --url https://moviesdb.com/movies/all
 
moviedb 中所有電影的列表都將被獲取并打印。
(3) --header 或者 -H
這個選項用于設(shè)置請求的頭信息。
當(dāng)向服務(wù)器發(fā)送HTTP時,在請求中包含的額外頭。你可以指定任意數(shù)量的額外頭。請注意,如果你要添加一個自定義的頭文件,而這個頭文件的名字與 curl 內(nèi)部使用的頭文件相同,那么你在外部設(shè)置的頭將被用來代替內(nèi)部頭。
這反映了我們在正常編程中的做法,特別是在JavaScript中使用 XMLHttpRequest:
- const xhttp = new XMLHttpRequest()
 - xhttp.setHeader("Content-Type", "application/json")
 
頭信息用于向Web服務(wù)器傳達傳入的數(shù)據(jù)類型,或期望的數(shù)據(jù)類型,發(fā)送的數(shù)據(jù)類型應(yīng)與標(biāo)頭中指定的類型相同。
我們可以使用頭文件來獲得CORS權(quán)限,甚至可以獲得某些類型的請求方法的權(quán)限。我們可以用頭文件做的事情有很多。
因此,在cURL中,我們可以使用 —header 選項設(shè)置標(biāo)頭:
- curl --request POST \
 - --url http://localhost:5000/api/user \ --header 'content-type: application/json'
 
這里,我們正在向http://localhost:5000/api/user 端點發(fā)出 POST 請求,并通過 --header content-type: application/json’ 告訴服務(wù)器我們要發(fā)送的數(shù)據(jù)是 JSON 數(shù)據(jù)類型。
(4) --data 或者 -d
此選項用于將數(shù)據(jù)發(fā)送到HTTP服務(wù)器,這主要是在POST請求中使用,因為我們將數(shù)據(jù)發(fā)送到我們要添加到數(shù)據(jù)庫的服務(wù)器。因此,在cURL中,我們可以通過設(shè)置 —data 選項將數(shù)據(jù)指定為POST。
在POST請求中向HTTP服務(wù)器發(fā)送指定的數(shù)據(jù),就像瀏覽器在用戶填寫HTML表格并按下提交按鈕時一樣。
這是一個例子:
- curl --request POST \
 - --url http://localhost:5000 \
 - --header 'content-type: application/json' \
 - --data '{"name":"Arrow","description":"bad movie","rating":"7.0","image":"michaeljackson.png"}'
 
在這里,我們正在執(zhí)行對 http://localhost:5000端點的POST請求。
我們在 —data 選項中設(shè)置了要發(fā)送到服務(wù)器的數(shù)據(jù),即:
- '{"name":"Arrow","description":"bad movie","rating":"7.0","image":"michaeljackson.png”}
 
在Node.js / Express.js中使用cURL
讓我們看看如何設(shè)置Node.js / Express.js服務(wù)器并使用cURL測試端點:
- // server.js
 - const express = require("express")
 - const cors = require('cors')
 - const bodyParser = require('body-parser')
 - const helmet = require('helmet')
 - const app = express()let port = 5000 || process.env.PORT
 - /** 設(shè)置中間件 */app.use(cors())app.use(bodyParser.json({limit: '50mb'}))
 - app.use(helmet())let users = []let currId Date.now()app.get("api/user/:id", (req, res, next) => {
 - const userId = req.params.id const usersusers = users.filter(user => user.id === userId) if(users.length > 0)
 - res.send({ user: users[0] })
 - else
 - res.send({mesg: "No user found."})
 - next()
 - })app.get("api/users", (req, res, next) => {
 - res.send({ users }) next()
 - })app.post("api/user", (req, res, next) => {
 - let bdy = req.body bdy = { id: ++currId, ...bdy } users.push(bdy) res.send({ user: bdy }) next()
 - })/** 啟動服務(wù)器 */app.listen(port, () => { console.log(`Server started at port: ${port}`);
 - });
 
我們在這里有一些小的API端點:
- GEt api/users
 - GET api/user/:id
 - POST api/user它通過其 id 提取所有用戶(特定用戶),并可以添加新用戶。
 
啟動服務(wù)器:
- node server.js
 - Server started at port: 5000
 
現(xiàn)在,要在 api/user 上執(zhí)行POST請求,我們將 —url 設(shè)置為 http://localhost:5000/api/user,并將 --request 設(shè)置為POST,將 --header 設(shè)置為 content-type:application/json。
我們要添加用戶:
- name: "Chidume",
 - age: 28
 
因此數(shù)據(jù)將為 '{"name": "Chidume", "age": "28"}'
因此,cURL命令將是:
- curl --request POST \
 - --url http://localhost:5000/api/user \
 - --header 'content-type: application/json' \
 - --data '{"name": "Chidume", "age": "28"}'
 - { id: 5122435464, name: "Chidume", age: 28 }
 
我們從服務(wù)器上看到了結(jié)果:將用戶及其 id 添加到數(shù)據(jù)庫中。
讓我們添加另一個用戶:
- curl --request POST \
 - --url http://localhost:5000/api/user \
 - --header 'content-type: application/json' \
 - --data '{"name": "Nnamdi", "age": "21"}'
 - { id: 5122435465, name: "Nnamdi", age: 21 }
 
我們添加了另一個用戶“Nnamdi”,我們可以看到服務(wù)器的 id 及其結(jié)果。
現(xiàn)在,讓我們通過 api/user/:id 查詢“ Chidume”。在這里 :id 將是 id 5122435464。因此cURL將是:
- curl --request GET \
 - --url http://localhost:5000/api/user/5122435464
 - { user: { id: 5122435464, name: "Chidume", age: 28 } }
 
服務(wù)器的結(jié)果返回 id 為5122435464的用戶,即“Chidume”。
現(xiàn)在讓我們查詢一個不存在的用戶:
- curl --request GET \
 - --url http://localhost:5000/api/user/2000000000
 - { mesg: "No user found." }
 
這是當(dāng)我們遇到不存在的用戶時服務(wù)器上返回的結(jié)果。
現(xiàn)在,讓我們查詢所有用戶:
- curl --request GET \
 - --url http://localhost:5000/api/users
 - { users: [ { id: 5122435465, name: "Nnamdi", age: 21 }, { id: 5122435464, name: "Chidume", age: 28 } ] }
 
如你所見,將返回服務(wù)器中的所有用戶。















 
 
 




 
 
 
 