簡體   English   中英

從 Bash 腳本 POST 獲取 Json 正文和響應狀態

[英]Get Json body and Response Status from Bash Script POST

目前我正在使用:

#!/bin/bash

PROCESS=$(curl --location --request -v -X POST 'https://jsonplaceholder.typicode.com/posts' \
--header 'Content-Type: application/json' \
--data-raw '{"title": "foo","body": "bar","userId": "1"}')

echo "$PROCESS"

並得到:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   111  100    67  100    44    208    137 --:--:-- --:--:-- --:--:--   344
{
  "title": "foo",
  "body": "bar",
  "userId": "1",
  "id": 101
}

但我也想要響應狀態,例如 201 或類似的。

HTTP/2 200 
date: Mon, 30 Nov 2020 14:00:56 GMT
content-type: application/json; charset=utf-8
set-cookie: __cfduid=dfda1e85d5738eb18115dc0a07311a4dd1606744856; expires=Wed, 30-Dec-20 14:00:56 GMT; path=/; domain=.typicode.com; HttpOnly; SameSite=Lax
x-powered-by: Express
x-ratelimit-limit: 1000
x-ratelimit-remaining: 999
x-ratelimit-reset: 1606702897
vary: Origin, Accept-Encoding
access-control-allow-credentials: true
cache-control: max-age=43200
pragma: no-cache
expires: -1
x-content-type-options: nosniff
etag: W/"6b80-Ybsq/K6GwwqrYkAsFxqDXGC7DoM"
via: 1.1 vegur
cf-cache-status: HIT
age: 13185
cf-request-id: 06bb0df15c0000edfbfb9b8000000001
expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
report-to: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report?s=ABBCY6aKAHfezboFKgcq%2FlsWKQZDAORup49fKMArhm%2BYl3Kb99pMLrZpLtbXsfz%2BQ6RxnutmzE0mCX5AcIVGRjmq%2FIrIja5MeNFFnmpO7WBT1725PWdN1J0KFhcqNxvNP8He2TBjfd3N"}],"group":"cf-nel","max_age":604800}
nel: {"report_to":"cf-nel","max_age":604800}
server: cloudflare
cf-ray: 5fa518fbcbdfedfb-CDG

我想以一種很好的方式發布帖子並回顯正文和響應代碼。

響應代碼在 HTTP 標頭中發送。 您可以將標頭重定向到 STDERR,例如如下所述: Report HTTP Response Headers to stderr?

所以你可以這樣做:

out=$(curl -s -D /dev/stderr http://boardreader.com 2>/tmp/headers)
# parse /tmp/headers

如果您不想弄亂臨時文件,您可以嘗試更復雜的解決方案,例如將標准輸出和標准錯誤捕獲到不同的變量

您只能在一次調用中發出帖子或 header 請求,因此您需要在讀取同一變量的兩個單獨調用中執行此操作,因此:

PROCESS=$(curl -I 'https://jsonplaceholder.typicode.com/posts' && curl -X POST 'https://jsonplaceholder.typicode.com/posts' --header 'Content-Type: application/json' --data '{"title": "foo","body": "bar","userId": "1"}')

對我來說,首先檢查標頭是有意義的,如果此命令成功,則獲取 json 響應,並將兩者都讀入 PROCESS 變量。 如果您願意,當然可以更改順序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM