[英]Extracting data out of text from an API with bash
我有一個挑戰,但我沒有找到任何關於命令jq 的信息,包括這里。 我曾嘗試curl使用 json 應用程序 API 訪問頁面。 所以我用 | 運行兩者,但它總是顯示錯誤。
curl -s "https://ip-api.com/#105.154.81.106" | jq '.'
畢竟,我讀過那個'.' 每個內容都有,但唯一返回的是:
parse error: Invalid numeric literal at line 1, column 2
根據API 文檔,JSON 的正確端點:
http://ip-api.com/json
所以你可以試試這個(非 https):
curl -s http://ip-api.com/json/105.154.81.106 | jq '.'
文檔中也有說明:
Human usage
You can call ip-api.com, without /json/, from cURL, Wget and other CLI HTTP clients and get colourized, pretty printed JSON
使用像瀏覽器這樣的用戶代理針對https://ip-api.com/#105.154.81.106的未經身份驗證的請求提供了一個包含內容的漂亮網頁。 使用 curl 或 wget 等命令行客戶端的類似請求...
$ curl -s --dump-header headers "https://ip-api.com/#105.154.81.106" > output
您可以深入檢查輸出和標題。
$ cat output
{
"status" : "fail",
"message": "SSL unavailable for this endpoint, order a key at https://members.ip-api.com/"
}
它看起來像 JSON,但它在我的終端中是彩色的。
$ cat -e output
^[[39m{$
^[[96m"status"^[[39m : ^[[92m"fail"^[[39m,$
^[[96m"message"^[[39m: ^[[92m"SSL unavailable for this endpoint, order a key at https://members.ip-api.com/"^[[39m$
}$
有ansi轉義序列。 讓我們看看標題是否顯示:
$ cat headers
HTTP/1.1 403 Forbidden
Date: Wed, 25 Mar 2020 18:06:15 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 163
Access-Control-Allow-Origin: *
X-Ttl: 47
X-Rl: 42
嗯,Content-Type 是純文本,而不是 json,所以它沒有錯,確切地說,但令人驚訝。 更有趣的是,我們得到了一個403 。 不過,該消息在https://members.ip-api.com/ 上訂購密鑰才是真正的肉。
顯然,這里的目的是您應該獲取密鑰並針對 API 發出經過身份驗證的請求。
您可以使用ansifilter 之類的工具清除 ansi 序列
$ ansifilter output | jq -r .message
SSL unavailable for this endpoint, order a key at https://members.ip-api.com/
但是不能保證此 API 將來會繼續以這種方式“工作”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.