微信搜索【前端全棧開發者】關注這個脫髮、擺攤、 賣貨、持續學習的程序員,第一時間閱讀最新文章,會優先兩天發表新文章。關注便可大禮包,準能爲你節省很多錢!
在本教程中,咱們介紹cURL的基本選項,並經過示例介紹如何使用它們,而後咱們開發了一個帶有三個端點的Node/Express服務器,以演示如何使用本文介紹的cURL選項對服務器執行cURL的GET/POST請求。javascript
與cURL一塊兒使用的選項不少,咱們在此介紹的是可用於快速測試API端點的基本選項。前端
cURL是一種用於從服務器傳輸數據或向服務器傳輸數據的傳輸工具。它支持各類互聯網傳輸協議,包括:java
咱們可使用cURL執行一些有用的技巧,如代理支持、用戶身份驗證、FTP上傳、HTTP post、SSL鏈接、cookie、文件傳輸恢復、Metalink等等。node
cURL是在命令行中使用的,在軟件開發過程當中,它主要是用來快速測試API的。當我想在Node.js服務器中測試我全部的API時,我我的使用cURL。對於開發者來講,這是一個很是方便的工具。程序員
Postman很酷,可是cURL很是酷。 – Chidume Nnamdi
在本文中,咱們將介紹基本的cURL函數和選項。咱們還將學習如何使用cURL在API端點上執行GET,POST請求。shell
—request
和 -X
指定與HTTP服務器通訊時可使用的自定義請求方法,將使用指定的請求方法代替其餘方法(默認爲GET)。數據庫
要執行POST請求:express
curl --request POST
要執行GET請求:編程
curl --request GET
這指定了咱們將獲取或傳輸數據的URL,當你想在配置文件中指定URL時,這個選項很是方便。json
若是給定的URL缺乏scheme name(例如「http://」」或「ftp://」」等),則cURL將基於主機進行猜想。
若是最外面的子域名與DICT,FTP,IMAP,LDAP,POP3或SMTP匹配,則將使用該協議。不然,將使用HTTP。
例如,若是你想在本地服務器上的 localhost:3000 上執行GET請求,則須要將 --url
設置爲 localhost:3000
:
curl --request GET \ --url http://localhost:3000
要在同一URL上執行POST:
curl --request POST \ --url http://localhost:3000
注意:反斜槓 \
用於分隔cURL中的選項。
對於外部API,仍是同樣。
假設你要從https://moviesdb.com/movies/a...。
curl --request GET \ --url https://moviesdb.com/movies/all
moviedb
中全部電影的列表都將被獲取並打印。
這個選項用於設置請求的頭信息。
當向服務器發送HTTP時,在請求中包含的額外頭。你能夠指定任意數量的額外頭。請注意,若是你要添加一個自定義的頭文件,而這個頭文件的名字與 curl 內部使用的頭文件相同,那麼你在外部設置的頭將被用來代替內部頭。
這反映了咱們在正常編程中的作法,特別是在JavaScript中使用 XMLHttpRequest
:
const xhttp = new XMLHttpRequest() xhttp.setHeader("Content-Type", "application/json")
頭信息用於向Web服務器傳達傳入的數據類型,或指望的數據類型,發送的數據類型應與標頭中指定的類型相同。
咱們可使用頭文件來得到CORS權限,甚至能夠得到某些類型的請求方法的權限。咱們能夠用頭文件作的事情有不少。
所以,在cURL中,咱們可使用 —header
選項設置標頭:
curl --request POST \ --url http://localhost:5000/api/user \ --header 'content-type: application/json'
這裏,咱們正在向http://localhost:5000/api/user 端點發出 POST 請求,並經過 --header content-type: application/json’
告訴服務器咱們要發送的數據是 JSON 數據類型。
此選項用於將數據發送到HTTP服務器,這主要是在POST請求中使用,由於咱們將數據發送到咱們要添加到數據庫的服務器。所以,在cURL中,咱們能夠經過設置 —data
選項將數據指定爲POST。
在POST請求中向HTTP服務器發送指定的數據,就像瀏覽器在用戶填寫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"}'
在這裏,咱們正在執行對 http://localhost:5000端點的POST請求。
咱們在 —data
選項中設置了要發送到服務器的數據,即:'{"name":"Arrow","description":"bad movie","rating":"7.0","image":"michaeljackson.png」}
讓咱們看看如何設置Node.js / Express.js服務器並使用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 /** 設置中間件 */ 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 users = 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() }) /** 啓動服務器 */ app.listen(port, () => { console.log(`Server started at port: ${port}`); });
咱們在這裏有一些小的API端點:
GEt api/users
GET api/user/:id
POST api/user
它經過其 id
提取全部用戶(特定用戶),並能夠添加新用戶。
啓動服務器:
node server.js Server started at port: 5000
如今,要在 api/user
上執行POST請求,咱們將 —url
設置爲 http://localhost:5000/api/user,並將 --request
設置爲POST,將 --header
設置爲 content-type:application/json
。
咱們要添加用戶:
name: "Chidume", age: 28
所以數據將爲 '{"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 }
咱們從服務器上看到告終果:將用戶及其 id
添加到數據庫中。
讓咱們添加另外一個用戶:
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」,咱們能夠看到服務器的 id
及其結果。
如今,讓咱們經過 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 } }
服務器的結果返回 id
爲5122435464的用戶,即「Chidume」。
如今讓咱們查詢一個不存在的用戶:
curl --request GET \ --url http://localhost:5000/api/user/2000000000 { mesg: "No user found." }
這是當咱們遇到不存在的用戶時服務器上返回的結果。
如今,讓咱們查詢全部用戶:
curl --request GET \ --url http://localhost:5000/api/users { users: [ { id: 5122435465, name: "Nnamdi", age: 21 }, { id: 5122435464, name: "Chidume", age: 28 } ] }
如你所見,將返回服務器中的全部用戶。
若是你對此有任何疑問,或者我應該添加,更正或刪除任何內容,請隨時發表評論。
原文:https://blog.logrocket.com做者:Chidume Nnamdi Follow