Httpie: curl๊ณผ ๊ฐ™์€ raw body์— '-d, --data' ์˜ต์…˜ ์ถ”๊ฐ€ ์š”์ฒญ

์— ๋งŒ๋“  2016๋…„ 10์›” 31์ผ  ยท  18์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: httpie/httpie

curl ์™€ ๊ฐ™์ด ์›์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ์š”์ฒญ์ด ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

http :/api/user -d 'MyRawData...'

๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ JSON ๋˜๋Š” ์–‘์‹ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด _"์š”์ฒญ ํ•ญ๋ชฉ"_์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

http :/api/hey say=Hello to=me โ€ฆ

๊ทธ๋ฆฌ๊ณ  ์ฝ˜ํ…์ธ  ์œ ํ˜•์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ๋ณด๋‚ผ JSON ๋˜๋Š” ์–‘์‹ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

echo 'MyRawData...' | http :/api/hey

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋น„์‹ค์šฉ์ ์ž…๋‹ˆ๋‹ค. HTTPie์˜ ์ฃผ์š” ์•„์ด๋””์–ด๋Š” _cURL๊ณผ ๊ฐ™์€ ์ธ๊ฐ„์šฉ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค_ , ์ด ๊ฒฝ์šฐ๋Š” ๊ทธ ์›์น™๊ณผ๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ด์ „ ์˜ˆ์—์„œ curl ๊ฐ€ HTTPie๋ณด๋‹ค ๋” ์‹ค์šฉ์ ์ž…๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•œ ์˜ต์…˜์ด ์—†๋‹ค๋Š” ์ด์œ ๋กœ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ช…๋ น์„ ์ถ”๊ฐ€ํ•˜๊ณ  | < ์™€ ๊ฐ™์€ ๋ชป์ƒ๊ธด ๋ฌธ์ž๋กœ ํŒŒ์ดํ”„ํ•˜๋Š” ๊ฒƒ์€ _์ธ๊ฐ„ ์นœํ™”์ ์ธ_ ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

-d ์˜ต์…˜์„ http ์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฌด์—‡์ด ๋ฌธ์ œ์ž…๋‹ˆ๊นŒ?

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

http POST example.org <<< "foo bar" ๋˜๋Š” http POST example.org < file.name ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

http์— -d ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ?

_ํŠนํžˆ_ ์ž˜๋ชป๋œ ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ฐฐ๊ด€์ด ๋” ๊นจ๋—ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜๊ณ  ๊ฐ™์€ ์ผ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•˜๋‚˜๋ฟ์ผ ๋•Œ ๊ฐ•๋ ฅํ•˜๊ฒŒ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ๊ด€์€ ๋ฐ”๋กœ ์ด ๋ชฉ์ ์„ ์œ„ํ•ด ์กด์žฌํ•˜๋ฉฐ(์˜ˆ: _data_๋ฅผ ํ”„๋กœ๊ทธ๋žจ์— ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด), ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ๋ณดํŽธ์ ์ด๋ฉฐ ๋ชจํ˜ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ดœ์ฐฎ์€ CLI ๋„๊ตฌ๋Š” ํŒŒ์ดํ•‘( curl ์ œ์™ธ)์„ ์ง€์›ํ•˜๋ฏ€๋กœ ๊ฐœ๋…์„ ํ•œ ๋ฒˆ๋งŒ ๋ฐฐ์šฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋น„๊ตํ•˜๋‹ค:

httpie

์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ณดํŽธ์ ์ธ ๋ฐฉ๋ฒ•์€ ๋ฆฌ๋””๋ ‰์…˜๋œ ํ‘œ์ค€ ์ž…๋ ฅ(ํ‘œ์ค€ ์ž…๋ ฅ)์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋ฒ„ํผ๋ง๋œ ๋‹ค์Œ ์š”์ฒญ ๋ณธ๋ฌธ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ถ”๊ฐ€ ์ฒ˜๋ฆฌ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ณฑ์Šฌ ๊ณฑ์Šฌํ•˜๋‹ค

-d, --data <data>
              (HTTP)  Sends  the  specified data in a POST request to the HTTP server, in the same way that a browser
              does when a user has filled in an HTML form and presses the submit button. This will cause curl to pass
              the  data  to  the  server  using  the  content-type application/x-www-form-urlencoded.  Compare to -F,
              --form.

              -d, --data is the same as --data-ascii. --data-raw is almost the same  but  does  not  have  a  special
              interpretation of the @ character. To post data purely binary, you should instead use the --data-binary
              option.  To URL-encode the value of a form field you may use --data-urlencode.

              If any of these options is used more than once on the same command line, the data pieces specified will
              be merged together with a separating &-symbol. Thus, using '-d name=daniel -d skill=lousy' would gener-
              ate a post chunk that looks like 'name=daniel&skill=lousy'.

              If you start the data with the letter @, the rest should be a file name to read the data from, or -  if
              you  want  curl  to read the data from stdin. Multiple files can also be specified. Posting data from a
              file named 'foobar' would thus be done with --data @foobar. When --data is told to  read  from  a  file
              like  that,  carriage  returns  and newlines will be stripped out. If you don't want the @ character to
              have a special interpretation use --data-raw instead.

๋„ค, ์ปค๋งจ๋“œ ๋ผ์ธ ๋„๊ตฌ์—์„œ ํŒŒ์ดํ•‘์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ๊ธฐ๋Šฅ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํŒŒ์ดํ•‘์„ ์ง€์›ํ•˜๋Š” ๋ช…๋ น์ค„ ๋„๊ตฌ( Mongotail )๋ฅผ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ ์†”์งํžˆ curl ์ธ์ง€ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค. ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Unix ์—์ฝ”์‹œ์Šคํ…œ์—์„œ ์•Œ๋ ค์ง„ ๊ฑฐ์˜ ๋ชจ๋“  CLI ๋„๊ตฌ๊ฐ€ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ๋ชจ๋‘ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ์ง€์›ํ•œ๋‹ค๊ณ  ํ•ด์„œ ๋ณต์žก์„ฑ์ด ์ถ”๊ฐ€๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ. cat , grep , find , tail ...

์–ธ๊ธ‰ํ•œ ๋ช…๋ น์€ ์ผ๋ฐ˜์ ์œผ๋กœ stdin ํ†ตํ•ด ํŒŒ์ผ ์ด๋ฆ„ ์ธ์ˆ˜ ๋ชฉ๋ก ๋˜๋Š” ์›์‹œ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ธ์ˆ˜๋กœ ๋ฐ›์•„๋“ค์ด์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ธ์ˆ˜๋ฅผ ํ†ตํ•ด ์›์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜๋ฝํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋“œ๋ฌธ ์ผ์ž…๋‹ˆ๋‹ค.

(์ด์ „ ์ฃผ์„์—์„œ ์ž‘์„ฑํ•œ ๋‚ด์šฉ์„ ๋ช…ํ™•ํžˆ ํ•˜๊ธฐ: curl ๋Š” stdin์„ ์ง€์›ํ•˜์ง€๋งŒ ์˜ˆ๋ฅผ ๋“ค์–ด --data-binary @- ๋กœ ์ฝ๋„๋ก ๋ช…์‹œ์ ์œผ๋กœ ์ง€์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.)

์ด ๋ฌธ์ œ์™€ ๊ด€๋ จ๋œ ๋ฒ„๊ทธ๋ฅผ ์‹ ๊ณ ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๊ธฐ์— ์™”์œผ๋ฏ€๋กœ ๋ฒ„๊ทธ๊ฐ€ ์•„๋‹ˆ๋ผ ์„ค๊ณ„๋œ ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"curl"๋Œ€์‹  "httpie"๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝํ•œ bash ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์š”์ฒญ์€ http ์„œ๋ฒ„์— ๋Œ€ํ•œ ๋นˆ ๋ณธ๋ฌธ POST์ž…๋‹ˆ๋‹ค. ์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ docker exec -i ${container} bash -x ์— ํŒŒ์ดํ•‘ํ•˜์—ฌ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

http POST ๋ช…๋ น์ด ๋Œ€ํ™”ํ˜• ์…ธ์—์„œ ์‹คํ–‰๋  ๋•Œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๋™์•ˆ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ฆ‰์‹œ ์ข…๋ฃŒ๋˜๋„๋ก ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„์ฐจ๋ฆฌ๋Š” ๋ฐ ์–ด๋ ค์›€์„ ๊ฒช์—ˆ์Šต๋‹ˆ๋‹ค.

http docker exec ์—์„œ stdin ์„ ์ฝ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด " echo -n "๋ฅผ ํŒŒ์ดํ”„ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ์ด์ƒํ•˜๊ฒŒ ๋ณด์ž…๋‹ˆ๋‹ค.

#!/bin/bash
echo "STARTING..."
echo -n | http POST ...     # this replaces: curl -XPOST --data-binary '' ...
echo "Without the 'echo -n' above this statement would not be reached."
echo "DONE"

( @jamshid POST ๋‹จ์ˆœํžˆ http POST httpbin.org/post $ ๊ฐ€ ์žˆ๋Š” ๋นˆ ๋ณธ๋ฌธ . ์Šคํฌ๋ฆฝํŠธ์—์„œ HTTPie ์‚ฌ์šฉ์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์ฝ์œผ์‹ญ์‹œ์˜ค โ€” --ignore-stdin ์˜ต์…˜์„ ํฌํ•จํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ด€๋ จ์ด ์—†๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. , ํ•˜์ง€๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์—ฌ๊ธฐ์— ํšŒ์‹ ํ•˜๋Š” ๋Œ€์‹  ์ƒˆ ๋ฌธ์ œ ๋ฅผ ์—ฌ์‹ญ์‹œ์˜ค.)

15.1 ํŒŒ์ผ ์ด๋ฆ„์˜ ์š”์ฒญ ๋ฐ์ดํ„ฐ๊ฐ€ ์ด ๋ฌธ์ œ์˜ ์›๋ž˜ ์š”์ฒญ์„ ํฌํ•จํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ๋งž์Šต๋‹ˆ๊นŒ? ์ด ๋ฌธ์ œ๋Š” ๋‹ซ์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ œ์ณ๋‘๊ณ , ๋‚˜๋Š” ๋‚ด XML ํŒŒ์ผ์˜ ์ค„ ๋ฐ”๊ฟˆ์ด ์œ ์ง€๋˜์ง€ ์•Š๋Š” ์ด์œ ๋ฅผ ์•Œ์•„๋‚ด๊ธฐ ์œ„ํ•ด 3์‹œ๊ฐ„ ์ •๋„๋ฅผ ํ”ผํ–ˆ์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์–ด์ œ ์ „์— HTTPie์— ๋Œ€ํ•ด ์•Œ์•˜๋”๋ผ๋ฉด ์ข‹์•˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. (๋‚ด ์•ฑ์ธ ์ค„ ์•Œ์•˜๋Š”๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ๋‘๋ ค๋ฉด --data-binary ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” curl์ด์—ˆ์Šต๋‹ˆ๋‹ค.) HTTPie์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค, @DavidOliver . @mrsarm ์ด ํŒŒ์ผ ๋‚ด์šฉ์ด ์•„๋‹Œ ๋งค๊ฐœ๋ณ€์ˆ˜์—์„œ ๋ฌธ์ž์—ด์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์š”์ฒญํ–ˆ์Šต๋‹ˆ๋‹ค.

+1

@jakubroztocil ๊ธฐ๋Šฅ์ด ์žˆ๋Š” MR์„ ์ˆ˜๋ฝํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

http POST example.org <<< "foo bar" ๋˜๋Š” http POST example.org < file.name ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

http://api/hey say=์•ˆ๋…•ํ•˜์„ธ์š”=๋‚˜ โ€ฆ

http POST example.org <<< "foo bar" ๋˜๋Š” http POST example.org < file.name ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

powershell์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค. 'raw body data' | http post :8080/api/events ๋Š” powershell์—์„œ ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์›์‹œ ์‹ ์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด -d, --data ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ์›ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด "Bash here string"์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

http example.com/ <<<'{"name": "John"}'

UI ์ธก๋ฉด์—์„œ ์ด ์˜ต์…˜์€ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ƒํ•˜์ง€๋งŒ ์œ ํšจํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์ธ ๋นˆ json ๊ฐ์ฒด( {} )๋ฅผ ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@minusf : ์ด์ƒํ•˜์ง€๋งŒ ์œ ํšจํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์ธ ๋นˆ json ๊ฐ์ฒด( {} )๋ฅผ ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

$ echo '{}' | http httpbin.org/post

๋ฆฌ๋””๋ ‰์…˜ํ•˜๋Š” ๋™์•ˆ ๊ฐœํ–‰์„ ๋ฒ„๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

$ echo 20 | http POST httpbin.org/post

์ œ์ถœ๋œ ๋ฐ์ดํ„ฐ๋Š” "data": "20\n" ์ž…๋‹ˆ๋‹ค.

@hahattan echo ์— -n ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ›„ํ–‰ ์ค„ ๋ฐ”๊ฟˆ ๋ฌธ์ž๋ฅผ ์ธ์‡„ํ•˜์ง€ ์•Š๋„๋ก ์ง€์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ echo -n foo | http httpbin.org/post
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰

๊ด€๋ จ ๋ฌธ์ œ

hrj picture hrj  ยท  5์ฝ”๋ฉ˜ํŠธ

rashthedude picture rashthedude  ยท  3์ฝ”๋ฉ˜ํŠธ

Govinda-Fichtner picture Govinda-Fichtner  ยท  6์ฝ”๋ฉ˜ํŠธ

Abdallah-Obaid picture Abdallah-Obaid  ยท  4์ฝ”๋ฉ˜ํŠธ

cunde picture cunde  ยท  7์ฝ”๋ฉ˜ํŠธ