Bash 스크립트의 cURL 응답에서 URL을 추출하고 이 URL을 사용하여 다른 cURL 명령을 실행하는 방법

Bash 스크립트의 cURL 응답에서 URL을 추출하고 이 URL을 사용하여 다른 cURL 명령을 실행하는 방법

데이터를 출력으로 검색하는 컬 명령 예제가 있습니다. 이 외에도 출력에는 다음 데이터를 가져오기 위해 컬 명령을 실행하는 데 다시 사용할 수 있는 또 다른 URL도 포함되어 있습니다. 응답의 다음 URL을 사용하여 스크립트에서 프로그래밍 방식으로 다음 페이지의 이벤트를 자동으로 반환하는 bash 스크립트를 만드는 데 도움을 주세요.

예:

컬 -H '권한 부여: 전달자' -XGET 'https://.loggly.com/apiv2/events/iterate?q=*&from=-10m&until=now&size=1'

출력 샘플:

{
"events": [
   {
       "raw": "{\"function\": \"handle\", \"publish_success\": 83, \"timestamp\": \"17-02-01 00:58:04,852149\", \"start_time\": 1485910682.351175, \"args\": \"\", \"duration\": 2501, \"message\": \"end publish run\", \"publish_fail\": 0, \"level\": \"INFO\", \"source_duration\": {\"duration\": 1, \"end_time\": 1485910682.351801}, \"feature_duration\": {\"duration\": 1427, \"end_time\": 1485910683.786751}, \"pathname\": \"/opt/loggly/web/app/alert/management/commands/alerterd.py\", \"lineno\": 329, \"cache_duration\": {\"duration\": 1, \"end_time\": 1485910684.821093}, \"action\": \"alerterd\", \"update_duration\": {\"duration\": 8, \"end_time\": 1485910684.852121}, \"end_time\": 1485910684}",
       "logtypes": [
          "json",
          "syslog"
       ],
       "timestamp": 1485910684852,
       "unparsed": null,
       "logmsg": "{\"function\": \"handle\", \"publish_success\": 83, \"timestamp\": \"17-02-01 00:58:04,852149\", \"start_time\": 1485910682.351175, \"args\": \"\", \"duration\": 2501, \"message\": \"end publish run\", \"publish_fail\": 0, \"level\": \"INFO\", \"source_duration\": {\"duration\": 1, \"end_time\": 1485910682.351801}, \"feature_duration\": {\"duration\": 1427, \"end_time\": 1485910683.786751}, \"pathname\": \"/opt/loggly/web/app/alert/management/commands/alerterd.py\", \"lineno\": 329, \"cache_duration\": {\"duration\": 1, \"end_time\": 1485910684.821093}, \"action\": \"alerterd\", \"update_duration\": {\"duration\": 8, \"end_time\": 1485910684.852121}, \"end_time\": 1485910684}",
       "id": "7ce48bda-e819-11e6-808b-12a1c1f6d2c3",
       "tags": [],
       "event": {
           "syslog": {
               "severity": "Informational",
               "appName": "msg",
               "timestamp": "2017-02-01T00:58:04.852+00:00",
               "facility": "local use 1",
               "priority": "142",
               "host": "127.0.0.1"
           },
           "json": {
               "function": "handle",
               "publish_success": 83,
               "level": "INFO",
               "timestamp": "17-02-01 00:58:04,852149",
               "start_time": 1485910682.351175,
               "cache_duration": {
                   "duration": 1,
                   "end_time": 1485910684.821093
           },
           "update_duration": {
               "duration": 8,
               "end_time": 1485910684.852121
           },
           "duration": 2501,
           "pathname": "/opt/loggly/web/app/alert/management/commands/alerterd.py",
           "end_time": 1485910684,
           "source_duration": {
               "duration": 1,
               "end_time": 1485910682.351801
           },
           "action": "alerterd",
           "message": "end publish run",
           "publish_fail": 0,
           "feature_duration": {
               "duration": 1427,
               "end_time": 1485910683.786751
           },
           "lineno": 329
           }
       }
   }
],
"next": "https://<subdomain>.loggly.com/apiv2/events/iterate?next=eea25ee6-0e48-4428-a544-36d6441d132c"

}

그래서 우리는 다음과 같이 또 다른 명령을 실행하고 싶습니다:

컬 -H '권한 부여: 전달자' -XGET 'https://.loggly.com/apiv2/events/iterate?next=eea25ee6-0e48-4428-a544-36d6441d132c'

답변1

jq명령을 살펴보십시오 . 아직 설치되지 않은 경우 이제 대부분의 리포지토리에서 사용할 수 있습니다. 명령줄에서 JSON을 구문 분석하는 데 사용됩니다. 맨페이지나 여기에서 자세한 정보를 읽을 수 있습니다.

https://jqlang.github.io/jq

예를 들어 다음과 같이 컬 명령의 출력을 jq로 파이프하는 경우:

   curl .... | jq '.next' 

다음과 같이 따옴표로 묶인 URL 값만 얻을 수 있습니다.

"https://<subdomain>.loggly.com/apiv2/events/iterate?next=eea25ee6-0e48-4428-a544-36d6441d132c"

값의 유효성을 테스트하거나 다른 컬 또는 필요한 항목에 전달할 수 있습니다.

답변2

.json을 구문 분석하고 해당 부분을 추출하려면 jq, fx 또는 jshon과 같은 도구를 사용해야 합니다 .next.

: 간단하고 빠른 JSON 파서입니다.

FX: 컬과 함께 사용하도록 설계된 JSON 파서입니다.

제이슨: 정말 빠르고 가벼운 JSON 파서입니다.

그러면 bash 스크립트(jq 사용)는 다음과 같이 간단해질 수 있습니다.

#!/bin/bash
JSONF="filewithurl.json"
curl  $(jq -r ".next" < ${JSONF}) -H 'Authorization: bearer '

참고로 이는테스트되지 않은귀하의 URL이 불완전하기 때문에 보안이나 코드 유출로 인한 것으로 추정됩니다.

관련 정보