簡體   English   中英

使用 bash 從 API 中提取文本數據

[英]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.

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