Httpie: JSON рдпрд╛ XML рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 5 рдЬрдире░ 2015  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: httpie/httpie

рдХрднреА-рдХрднреА рдПрдкреАрдЖрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИред

рдЬреЗрдПрд╕рдУрдПрди рдпрд╛ рдПрдХреНрд╕рдПрдордПрд▓ рд▓реМрдЯрд╛рдиреЗ рд╡рд╛рд▓реЗ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдРрд╕рд╛ рдХреБрдЫ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛

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/
- XML тАЛтАЛрдХреЗ рд▓рд┐рдП xmlstarlet рдФрд░ рдЕрдиреНрдп 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 рдкрд░ рдбреЙрдХрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 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 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

maciej picture maciej  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

rshurts picture rshurts  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

rashthedude picture rashthedude  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jclem picture jclem  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

filipesperandio picture filipesperandio  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ