cURL簡介:高級程序員都在用的工具

image

微信搜索【前端全棧開發者】關注這個脫髮、擺攤、 賣貨、持續學習的程序員,第一時間閱讀最新文章,會優先兩天發表新文章。關注便可大禮包,準能爲你節省很多錢!

在本教程中,咱們介紹cURL的基本選項,並經過示例介紹如何使用它們,而後咱們開發了一個帶有三個端點的Node/Express服務器,以演示如何使用本文介紹的cURL選項對服務器執行cURL的GET/POST請求。javascript

與cURL一塊兒使用的選項不少,咱們在此介紹的是可用於快速測試API端點的基本選項。前端

介紹

cURL是一種用於從服務器傳輸數據或向服務器傳輸數據的傳輸工具。它支持各類互聯網傳輸協議,包括:java

  • 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執行一些有用的技巧,如代理支持、用戶身份驗證、FTP上傳、HTTP post、SSL鏈接、cookie、文件傳輸恢復、Metalink等等。node

cURL是在命令行中使用的,在軟件開發過程當中,它主要是用來快速測試API的。當我想在Node.js服務器中測試我全部的API時,我我的使用cURL。對於開發者來講,這是一個很是方便的工具。程序員

Postman很酷,可是cURL很是酷。 – Chidume Nnamdi

在本文中,咱們將介紹基本的cURL函數和選項。咱們還將學習如何使用cURL在API端點上執行GET,POST請求。shell

cURL選項

--request 或者 -X

—request-X 指定與HTTP服務器通訊時可使用的自定義請求方法,將使用指定的請求方法代替其餘方法(默認爲GET)。數據庫

要執行POST請求:express

curl --request POST

要執行GET請求:編程

curl --request GET

--url</code

這指定了咱們將獲取或傳輸數據的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 中全部電影的列表都將被獲取並打印。

--header 或者 -H

這個選項用於設置請求的頭信息。

當向服務器發送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 數據類型。

--data 或者 -d

此選項用於將數據發送到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

讓咱們看看如何設置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

相關文章
相關標籤/搜索