2024年1月18日 星期四

Web API 測試工具 Postman (線上版)

這幾天在測試 Line Bot 時需要測試 Web API, 我在 "Python 從網路爬蟲到生活應用超實務" 這本書的第 16 章看到作者使用 Servistate HTTP Editor 這個 Chrome 外掛來測試 API, 但連到官網要下載卻出現 404 錯誤, 不知是何原因 :





但另外找到一個似乎更多人使用的 Postman, 可以下載安裝版, 也提供線上版, 本篇先來玩看看它的線上版 :



按 "Try the Web Version" 鈕輸入 Email 按 "Sign Up for Free" 鈕完成註冊即可使用 : 




httpbin.org 是一個 HTTP 測試網站, 它使用 RESTful 方式來模擬 HTTP 的回應, 使用方法很簡單, 就是在 http.org 網址後面提供串接 get, post, delete 等方法, 例如 :
如果要模擬 404, 505 等回應狀態, 則是在 status 後面串回應碼, 例如 :


參考 :


以下用 Postman 測試最常用的 GET 與 POST 方法, GET 方法是將參數帶在 URL 上向指定的資源請求資料, 因為參數會顯示在網址列, 故主要用於向伺服器查詢 (query) 非機敏的資料; 而 POST 方法則是將參數放在 HTTP 的主體 (BODY) 中傳送, 長度不受限制, 且不會顯示於網址列也不會存放於瀏覽歷史中, 故安全隱密性較高. 參考 :


httpbin.org 網站會將請求標頭的訊息回應給客戶端 (例如瀏覽器, 此處為 Postman 線上測試網頁), 在右上方的欄位中輸入 http://httpbin.org/get 然後按右邊的 "Send" 鈕會在底下顯示 httpbin.org 網站的回應訊息 (預設是用 GET 方法) :




也可以在 URL 後面以 ? 帶參數 (多個參數用 & 串接), 例如 http://httpbin.org/get?a=1&b=2 :




從底下的回應訊息可知, httpbin.org 將收到的 GET 請求中所攜帶的 a, b 兩參數放在 JSON 回應的 args 屬性中傳回給 Postman. 

{
    "args": {
        "a": "1",
        "b": "2"
    },
    "headers": {
        "Accept": "*/*",
        "Accept-Encoding": "gzip, deflate, br",
        "Cache-Control": "no-cache",
        "Host": "httpbin.org",
        "Postman-Token": "b42f6474-9a1d-4a6e-b646-2e9ebb44baab",
        "User-Agent": "PostmanRuntime/7.36.1",
        "X-Amzn-Trace-Id": "Root=1-65a8983f-490ef05710367ea117cd0fa0"
    },
    "origin": "54.86.50.139",
    "url": "http://httpbin.org/get?a=1&b=2"


如果要改用 POST 方法提出請求, 先選擇方法為 POST, 右方欄位輸入 http://httpbin.org/post, 然後點選下方的 body 頁籤, 預設是 none, 選擇 form-data : 




然後於 key/value 表格中填入參數 (key) 與其值 (value) : 




然後按 "Send" 鈕, 測試網站會將 header 與參數等放在 HTTP 回應中傳回給 Postman :

{
    "args": {},
    "data": "",
    "files": {},
    "form": {
        "a": "1",
        "b": "2"
    },
    "headers": {
        "Accept": "*/*",
        "Accept-Encoding": "gzip, deflate, br",
        "Cache-Control": "no-cache",
        "Content-Length": "222",
        "Content-Type": "multipart/form-data; boundary=----WebKitFormBoundary4V35IS83sTKv4M6B",
        "Host": "httpbin.org",
        "Postman-Token": "96aaacdc-2d48-427c-b8fe-65ca675caabc",
        "User-Agent": "PostmanRuntime/7.36.1",
        "X-Amzn-Trace-Id": "Root=1-65a8d14d-46741ab153db489f4fbba98e"
    },
    "json": null,
    "origin": "54.86.50.139",
    "url": "http://httpbin.org/post"
}

因為參數是放在 form-data 中傳送, 故回應時是放在 form 屬性中. 也可以選擇 raw 用 JSON 格式傳送參數 : 




回應訊息如下 : 


{
    "args": {},
    "data": "{\"a\": \"1\", \"b\":\"2\"}",
    "files": {},
    "form": {},
    "headers": {
        "Accept": "*/*",
        "Accept-Encoding": "gzip, deflate, br",
        "Cache-Control": "no-cache",
        "Content-Length": "19",
        "Content-Type": "application/json",
        "Host": "httpbin.org",
        "Postman-Token": "7402e57e-b9b7-483e-9e03-823486eb3afd",
        "User-Agent": "PostmanRuntime/7.36.1",
        "X-Amzn-Trace-Id": "Root=1-65a8e0a6-1455d5b1459a311933a63854"
    },
    "json": {
        "a": "1", 
        "b": "2"
    },
    "origin": "54.86.50.139",
    "url": "http://httpbin.org/post"
}

可見回傳訊息中的 data 與 json 屬性中皆可取得傳送之參數. 

參考 :


沒有留言 :