博文|你還在用python寫API,趕緊體驗全新curl、jq的API!

      網友投稿 1004 2025-04-02

      本實驗中,將使用bash環境與實用程序“curl”和“jq”來執行Zabbix API調用并編寫一些腳本。“curl”是一個通過HTTP/HTTPS交換JSON消息的工具。實用程序“jq”有助于定位和提取輸出中的特定元素。


      為了進行實驗需要安裝“jq”:

      # On CentOS7/RHEL7:

      yum install epel-release && yum install jq

      # On CentOS8/RHEL8:

      dnf install jq

      # On Ubuntu/Debian:

      apt install jq

      # On any 64-bit Linux platform:

      curl -skL "https://github.com/stedolan/jq/releases/download/jq1.5/jq-linux64" -o /usr/bin/jq && chmod +x /usr/bin/jq

      獲取一個授權令牌

      為了使API調用運作,需要:

      定義一個API地址。這是一個URL,這個地址后端是個php文件被設計用來接收請求用的。

      本實驗中,將使用bash環境與實用程序“curl”和“jq”來執行Zabbix API調用并編寫一些腳本。“curl”是一個通過HTTP/HTTPS交換JSON消息的工具。實用程序“jq”有助于定位和提取輸出中的特定元素。

      為了進行實驗需要安裝“jq”:

      # On CentOS7/RHEL7:

      yum install epel-release && yum install jq

      # On CentOS8/RHEL8:

      dnf install jq

      # On Ubuntu/Debian:

      apt install jq

      # On any 64-bit Linux platform:

      curl -skL "https://github.com/stedolan/jq/releases/download/jq1.5/jq-linux64" -o /usr/bin/jq && chmod +x /usr/bin/jq

      獲取一個授權令牌

      為了使API調用運作,需要:

      定義一個API地址。這是一個URL,這個地址后端是個php文件被設計用來接收請求用的。

      獲取一個授權令牌。

      如果趨向于從前端服務器執行API調用,那么有可能出現以下情況。

      url=http://127.0.0.1/api_jsonrpc.php

      # or:

      url=http://127.0.0.1/zabbix/api_jsonrpc.php

      為跳轉到下一步,必須設置URL變量來測試是否已經配置:

      echo $url

      任何API調用都需要通過授權令牌才可使用。使用以下命令,將一個授權令牌放入變量:

      auth=$(curl -s -X POST -H 'Content-Type: application/json-rpc' \

      -d '

      {"jsonrpc":"2.0","method":"user.login","params":

      {"user":"api","password":"zabbix"},

      "id":1,"auth":null}

      ' $url | \

      jq -r .result

      )

      注:注意用戶“api”的密碼是“zabbix”,這是API調用的專用用戶。

      檢查是否有會話密鑰,應該是32字符的十六進制字符串:

      echo $auth

      整體思路

      1)訪問文檔頁面并選擇一個API方法,例如alert.get:

      {

      "jsonrpc": "2.0",

      "method": "alert.get",

      "params": {

      "output": "extend",

      "actionids": "3"

      },

      "auth": "038e1d7b1735c6a5436ee9eae095879e",

      "id": 1

      }

      2)使用你最熟悉的text編輯器,使用查找和替換功能轉義所有的雙引號。

      {

      \"jsonrpc\": \"2.0\",

      \"method\": \"alert.get\",

      \"params\": {

      \"output\": \"extend\",

      \"actionids\": \"3\"

      },

      \"auth\": \"038e1d7b1735c6a5436ee9eae095879e\",

      \"id\": 1

      }

      注:千萬別想著手動完成這個過程!

      3)用我們的變量$auth替換會話密鑰038e1d7b1735c6a5436ee9eae095879e

      {

      博文|你還在用python寫API,趕緊體驗全新curl、jq的API!

      \"jsonrpc\": \"2.0\",

      \"method\": \"alert.get\",

      \"params\": {

      \"output\": \"extend\",

      \"actionids\": \"3\"

      },

      \"auth\": \"$auth\",

      \"id\": 1

      }

      4)現在用curl封裝API命令:

      curl -s -X POST \

      -H 'Content-Type: application/json-rpc' \

      -d " \

      {

      \"jsonrpc\": \"2.0\",

      \"method\": \"alert.get\",

      \"params\": {

      \"output\": \"extend\",

      \"actionids\": \"3\"

      },

      \"auth\": \"$auth\",

      \"id\": 1

      }

      " $url

      通過執行前面的命令,應該已經在響應中輸出了一個JSON內容。

      為了使輸出更漂亮,我們可以將其傳送到jq .:

      curl -s -X POST \

      -H 'Content-Type: application/json-rpc' \

      -d " \

      {

      \"jsonrpc\": \"2.0\",

      \"method\": \"alert.get\",

      \"params\": {

      \"output\": \"extend\",

      \"actionids\": \"3\"

      },

      \"auth\": \"$auth\",

      \"id\": 1

      }

      " $url | jq .

      將所有內容打包為一個文件

      現在準備好使用代碼片段了:

      #!/bin/bash

      # 1. set connection details

      url=http://127.0.0.1/api_jsonrpc.php

      user=api

      password=zabbix

      # 2. get authorization token

      auth=$(curl -s -X POST \

      -H 'Content-Type: application/json-rpc' \

      -d " \

      {

      \"jsonrpc\": \"2.0\",

      \"method\": \"user.login\",

      \"params\": {

      \"user\": \"$user\",

      \"password\": \"$password\"

      },

      \"id\": 1,

      \"auth\": null

      }

      " $url | \

      jq -r '.result'

      )

      # 3. show triggers in problem state

      curl -s -X POST \

      -H 'Content-Type: application/json-rpc' \

      -d " \

      {

      \"jsonrpc\": \"2.0\",

      \"method\": \"trigger.get\",

      \"params\": {

      \"output\": \"extend\",

      \"selectHosts\": \"extend\",

      \"filter\": {

      \"value\": 1

      },

      \"sortfield\": \"priority\",

      \"sortorder\": \"DESC\"

      },

      \"auth\": \"$auth\",

      \"id\": 1

      }

      " $url | \jq -r

      '.result'

      # 4. logout user

      curl -s -X POST \

      -H 'Content-Type: application/json-rpc' \

      -d " \

      {

      \"jsonrpc\": \"2.0\",

      \"method\": \"user.logout\",

      \"params\": [],

      \"id\": 1,

      \"auth\": \"$auth\"

      }

      " $url

      便利性

      我們可以使用https://jsonpathfinder.com/來辨別提取元素的路徑。

      例如,利用API調用列出所有使用的Zabbix proxy:

      curl -s -X POST \

      -H 'Content-Type: application/json-rpc' \

      -d " \

      {

      \"jsonrpc\": \"2.0\",

      \"method\": \"proxy.get\",

      \"params\": {

      \"output\": [\"host\"]

      },

      \"auth\": \"$auth\",

      \"id\": 1

      }

      " $url

      它可能輸出以下內容:

      {"jsonrpc":"2.0","result":[{"host":"broceni","proxyid":"10387"},{"host":"mysql8mon","proxyid":"12066"},{"host":"riga","proxyid":"12585"}],"id":1}

      在JSONPathFinder中,通過在右側面板上單擊鼠標,我們可以定位需要提取的樣本元素:

      它建議路徑“x.result[1].host”。這意味著為提取所有元素,可以移除數字并如下所示使用“.result[].host”:

      curl -s -X POST \

      -H 'Content-Type: application/json-rpc' \

      -d " \

      {

      \"jsonrpc\": \"2.0\",

      \"method\": \"proxy.get\",

      \"params\": {

      \"output\": [\"host\"]

      },

      \"auth\": \"$auth\",

      \"id\": 1

      }

      " $url | jq -r '.result[].host'

      現在它僅輸出proxy標題:

      broceni

      mysql8mon

      riga

      API Python

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:采購訂單的管理
      下一篇:wps表格里一列數據如何調成多列 一列數據分割成多列數據設置方法
      相關文章
      中国亚洲女人69内射少妇| 久久亚洲sm情趣捆绑调教| 亚洲视屏在线观看| 国产亚洲综合一区柠檬导航| 亚洲伊人久久综合影院| 亚洲精品久久无码| 亚洲AV永久无码精品网站在线观看 | 亚洲AV无码资源在线观看| 亚洲卡一卡二卡乱码新区| 亚洲不卡在线观看| 亚洲一区二区三区无码国产 | 亚洲影院在线观看| 久久亚洲私人国产精品vA| 久久久久亚洲精品无码蜜桃| 亚洲av成人无码久久精品| 日韩精品一区二区亚洲AV观看| 水蜜桃亚洲一二三四在线 | 狠狠色伊人亚洲综合网站色| 亚洲一区二区三区久久久久| 亚洲av永久无码精品三区在线4| 国产精品亚洲四区在线观看| 亚洲中文无码永久免| 亚洲国产精品无码观看久久| 国产青草亚洲香蕉精品久久| 亚洲M码 欧洲S码SSS222| 亚洲精品成人区在线观看| 中文字幕亚洲电影| 亚洲AV永久无码区成人网站| 亚洲av永久无码精品表情包| 亚洲天堂男人天堂| 亚洲伊人久久大香线蕉| 亚洲欧美日韩国产精品一区| 国产成人高清亚洲一区91| 亚洲国产人成精品| 精品亚洲综合久久中文字幕| 婷婷亚洲综合五月天小说| 亚洲专区一路线二| 在线视频亚洲一区| 中文字幕在线亚洲精品| 亚洲AV成人片色在线观看高潮 | 亚洲精品高清在线|