Httpie: JSON ๋˜๋Š” XML ํ•„ํ„ฐ๋ง ๊ธฐ๋Šฅ

์— ๋งŒ๋“  2015๋…„ 01์›” 05์ผ  ยท  5์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: httpie/httpie

๋•Œ๋•Œ๋กœ API ์‘๋‹ต์—๋Š” ๋งŽ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

JSON ๋˜๋Š” XML์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋์ ์ด ์ฃผ์–ด์ง€๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

http http://myapi.endpoint/ -q "abc/xyz"

์‘๋‹ต์˜ "abc/xyz" ํ•˜์œ„ ํŠธ๋ฆฌ๋งŒ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด๊ฒƒ์ด httpie๊ฐ€ ์ง€์›ํ•ด์•ผ ํ•˜๋Š” ๋ฒ”์œ„๋ฅผ ์•ฝ๊ฐ„ ๋ฒ—์–ด๋‚ฉ๋‹ˆ๋‹ค. JSON์šฉ jq ๋Š” ํ›Œ๋ฅญํ•˜๊ณ  ํŒŒ์ดํ”„๋ฅผ ํ†ตํ•ด HTTPie์™€ ์ž˜ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค. ๋ฌธ์„œ์— ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์ œ๋ฅผ ์ถ”๊ฐ€ํ•  ๊ณ„ํš์ด์ง€๋งŒ ์ง€๊ธˆ์€ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

$ http httpbin.org/get
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Length: 398
Content-Type: application/json
Date: Wed, 07 Jan 2015 19:03:04 GMT
Server: gunicorn/18.0
Via: 1.1 vegur

{
    "args": {},
    "headers": {
        "Accept": "*/*",
        "Accept-Encoding": "gzip, deflate",
        "Connect-Time": "1",
        "Connection": "close",
        "Host": "httpbin.org",
        "Total-Route-Time": "1",
        "User-Agent": "HTTPie/0.8.0",
        "Via": "1.1 vegur",
        "X-Request-Id": "2b2e03a0-0449-40f1-9027-73bfe9edf31f"
    },
    "url": "http://httpbin.org/get"
}
$ http httpbin.org/get | jq '.headers["User-Agent"]'
"HTTPie/0.8.0"

๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ํ˜•์‹์„ ์ฟผ๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค๋ฅธ ๋„๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  5 ๋Œ“๊ธ€

+1, ์ด๊ฒƒ์€ ๊ต‰์žฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค

์ด๋ฅผ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ์™ธ๋ถ€ ๋„๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
- JSON์šฉ jq http://stedolan.github.io/jq/
- xmlstarlet ๋ฐ ๊ธฐํƒ€ XML์šฉ http://stackoverflow.com/a/15461774
๋‹จ์ˆœํžˆ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@corpix ๋งํฌ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์„ ์•Œ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ†ตํ•ฉ ๋„๊ตฌ์—๋Š” ์žฅ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•ด ์šธํƒ€๋ฆฌ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์›ํ•˜๋Š” ๊ฒฝ์šฐ ์ด ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•˜๋„๋ก ๋งก๊น๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด httpie๊ฐ€ ์ง€์›ํ•ด์•ผ ํ•˜๋Š” ๋ฒ”์œ„๋ฅผ ์•ฝ๊ฐ„ ๋ฒ—์–ด๋‚ฉ๋‹ˆ๋‹ค. JSON์šฉ jq ๋Š” ํ›Œ๋ฅญํ•˜๊ณ  ํŒŒ์ดํ”„๋ฅผ ํ†ตํ•ด HTTPie์™€ ์ž˜ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค. ๋ฌธ์„œ์— ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์ œ๋ฅผ ์ถ”๊ฐ€ํ•  ๊ณ„ํš์ด์ง€๋งŒ ์ง€๊ธˆ์€ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

$ http httpbin.org/get
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Length: 398
Content-Type: application/json
Date: Wed, 07 Jan 2015 19:03:04 GMT
Server: gunicorn/18.0
Via: 1.1 vegur

{
    "args": {},
    "headers": {
        "Accept": "*/*",
        "Accept-Encoding": "gzip, deflate",
        "Connect-Time": "1",
        "Connection": "close",
        "Host": "httpbin.org",
        "Total-Route-Time": "1",
        "User-Agent": "HTTPie/0.8.0",
        "Via": "1.1 vegur",
        "X-Request-Id": "2b2e03a0-0449-40f1-9027-73bfe9edf31f"
    },
    "url": "http://httpbin.org/get"
}
$ http httpbin.org/get | jq '.headers["User-Agent"]'
"HTTPie/0.8.0"

๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ํ˜•์‹์„ ์ฟผ๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค๋ฅธ ๋„๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ jq ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ์˜ˆ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ /var/run/docker.sock ํ†ตํ•ด Docker์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด httpie-unixsocket ๋„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

$ http http+unix://%2Fvar%2Frun%2Fdocker.sock/info | jq .RegistryConfig
{
  "InsecureRegistryCIDRs": [
    "127.0.0.0/8"
  ],
  "IndexConfigs": {
    "docker.io": {
      "Name": "docker.io",
      "Mirrors": null,
      "Secure": true,
      "Official": true
    }
  },
  "Mirrors": null
}
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰