Httpie: stdin 데이터λ₯Ό λ¬΄μ‹œν•˜λŠ” μ˜΅μ…˜ μΆ”κ°€

에 λ§Œλ“  2013λ…„ 07μ›” 23일  Β·  15μ½”λ©˜νŠΈ  Β·  좜처: httpie/httpie

http: error: Request body (from stdin or a file) and request data (key=value) cannot be mixed.

이 였λ₯˜λŠ” λ‹€μ†Œ μ• λ§€ν•©λ‹ˆλ‹€. λ‚˜λ¨Έμ§€ API와 μƒν˜Έ μž‘μš©ν•˜κΈ° μœ„ν•΄ μ‰˜ 슀크립트λ₯Ό μž‘μ„± 쀑이며 λ‹€μŒμ„ μˆ˜ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

http --output subnet --pretty format --form post "${URLHOST}subnets" "cidr=${cidr}" "name=${name}" "description=${name}" "availabilityZoneId=${az}" "networkId=${VPCid}" "$ACCESSKEY" "$SECRETKEY" "$ACCOUNTID" "_providerId=aws" "_regionId=${REGION}"

('cho'κ°€ μ•žμ— 였면 μ™„λ²½ν•˜κ²Œ μž‘λ™ν•˜λŠ” λͺ…령을 μƒμ„±ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 이 λ²„μ „μ—μ„œλŠ” 제λͺ©μ— 였λ₯˜κ°€ μžˆμŠ΅λ‹ˆλ‹€.

λ‚΄κ°€ 바보인가, μ•„λ‹ˆλ©΄ λ‹€λ₯Έ 무엇인가?

μ°Έκ³ : μœ„μ˜ κ²°κ³ΌλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€(μ•½κ°„ μœ„μƒ 처리됨).

http --output subnet --pretty format --form post https://test.grid.domain.com/subnets cidr=10.124.33.128/25 name=Load_balancers description=Load_balancers availabilityZoneId=us-east-1c networkId=vpc-31433e7e x-gridauth-accesskey:DOYOUNEEDTOKNOW x-gridauth-secretaccesskey:WHATISWITHALLTHEQUESTIONS x-gridauth-accountid:11223344556677 _providerId=aws _regionId=us-east-1
feature planned

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‚˜μ€‘μ— μ°Έμ‘°ν•  수 μžˆλ„λ‘ μš”μ²­ 데이터(key=value)κ°€ μš”μ²­ λ³Έλ¬Έ(stdinμ—μ„œ)보닀 μš°μ„ λ˜μ–΄μ•Ό 함을 HTTPie에 λͺ…μ‹œμ μœΌλ‘œ μ•Œλ¦¬λŠ” 데 μ‚¬μš©ν•  수 μžˆλŠ” CLI 인수 --ignore-stdin κ°€ μžˆμŠ΅λ‹ˆλ‹€.

http --ignore-stdin http://… lorem=ipsum dolor=sit

μ°Έμ‘° https://httpie.org/docs#redirected -μž…λ ₯

λͺ¨λ“  15 λŒ“κΈ€

이 였λ₯˜λŠ” HTTPie의 STDIN κ°€ λ¦¬λ””λ ‰μ…˜ 되고 λ™μ‹œμ— 인수 에 데이터도 지정될 λ•Œ λ°œμƒν•©λ‹ˆλ‹€.

$ echo 'data' | http POST example.org more=data   # This is invalid

STDIN을 μ „ν˜€ λ¦¬λ””λ ‰μ…˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‹€μŒμ€ 슀크립트의 μ»¨ν…μŠ€νŠΈμž…λ‹ˆλ‹€.

cat keyfile  | while read name az route cidr subnetid rest ; do
    http --output subnet --pretty format --form post \
    "${URLHOST}subnets" \
    "cidr=${cidr}" \
    "name=${name}" \
    "description=${name}"\
    "availabilityZoneId=${az}" \
    "networkId=${VPCid}"\
    "$ACCESSKEY" \
    "$SECRETKEY"\
    "$ACCOUNTID" \
    "_providerId=aws" "_regionId=${REGION}"

(그런 λ‹€μŒ 'μ„œλΈŒλ„·' νŒŒμΌμ„ ꡬ문 λΆ„μ„ν•˜κ³  λ‹€λ₯Έ μž‘μ—…μ„ κ³„μ†ν•©λ‹ˆλ‹€)

λ‚΄κ°€ ν•  수 μžˆλŠ” 일은 양식 ν•„λ“œλ₯Ό http 헀더와 ν˜Όν•©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ œλŒ€λ‘œ μž‘λ™ν•˜λ„λ‘ ν•  수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€(STDIN을 톡해 양식 데이터λ₯Ό ν‘Έμ‹œν•˜κ³  λ§€κ°œλ³€μˆ˜λ‘œ 헀더λ₯Ό ν‘Έμ‹œν•˜λŠ” 일뢀 μ‘°ν•©... λ˜λŠ” STDIN을 톡해 헀더 및 양식 데이터 λ“±).

λ¬Έμ œλŠ” 루프 μ»¨ν…μŠ€νŠΈμ—μ„œ HTTPieκ°€ STDIN (λ¦¬λ””λ ‰μ…˜λ¨)λ₯Ό μƒμ†ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

HTTPie의 STDIN λ₯Ό 터미널 μž…λ ₯( < /dev/tty )으둜 λ‹€μ‹œ λ³€κ²½ν•˜μ—¬ 이 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

cat file | while read line; do 
    http POST example.org  a="$line" < /dev/tty
done

와. μž‘λ™ν•©λ‹ˆλ‹€. μ‰˜ λ£¨ν”„μ˜ λ‚΄λΆ€ λͺ…령문이 μ£Όλ³€ λ£¨ν”„μ˜ ν‘œμ€€ μž…λ ₯을 μƒμ†ν•œλ‹€λŠ” 사싀을 μ „ν˜€ λͺ°λžμŠ΅λ‹ˆλ‹€.

도움을 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€... 슀슀둜 μ°Ύμ•˜μ„μ§€ λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

(이제 λ‚˜λŠ” μ™œ (λ‚˜λŠ” λͺ¨λ“  SH νŒŒμƒ μ‰˜μ„ κ°€μ •ν•˜κ³  있음) κ·Έ λ””μžμΈ μ„ νƒμ„ν–ˆλŠ”μ§€ κΆκΈˆν•©λ‹ˆλ‹€ ... )

μ–΄λ””μ—μ„œλ‚˜ μž‘λ™ν•˜λŠ” STDIN 읽기λ₯Ό λΉ„ν™œμ„±ν™”ν•˜λŠ” μ˜΅μ…˜μ΄ μžˆμ–΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•˜λ―€λ‘œ 이 μ˜΅μ…˜μ„ 열어두고 κΈ°λŠ₯으둜 νƒœκ·Έλ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.

이것은 맀우 ν˜Όλž€μŠ€λŸ½κ³  httpieκ°€ μ–΄λ””μ—μ„œλ‚˜ μž‘λ™ν•  수 μžˆλŠ” 것과 λ°˜λŒ€μž…λ‹ˆλ‹€. bash 루프 λ‚΄μ—μ„œ μ΄λŸ¬ν•œ λͺ…령을 μ‚¬μš©ν•˜λŠ” 것은 맀우 일반적인 μ‘μš© ν”„λ‘œκ·Έλž¨μž…λ‹ˆλ‹€. HttpieλŠ” ν‚€/값이 제곡되고 stdin을 μˆ˜μ‹ ν•  λ•Œ λΆˆν‰ν•΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€. λŒ€μ‹  ν‚€/값이 μš°μ„Έν•©λ‹ˆλ‹€.

HttpieλŠ” ν‚€/값이 제곡되고 stdin을 μˆ˜μ‹ ν•  λ•Œ λΆˆν‰ν•΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€. λŒ€μ‹  ν‚€/값이 μš°μ„Έν•©λ‹ˆλ‹€.

그것이 λ‹Ήμ‹ μ—κ²ŒλŠ” 직관적일 수 μžˆμ§€λ§Œ λ§Žμ€ λ‹€λ₯Έ μ‚¬λžŒλ“€μ—κ²ŒλŠ” μ •λ°˜λŒ€μ˜ 것이 훨씬 더 μ§κ΄€μ μž…λ‹ˆλ‹€. λ„κ΅¬λŠ” μΆ”μΈ‘ν•˜λ €κ³  ν•΄μ„œλŠ” μ•ˆ λ˜λ―€λ‘œ 였λ₯˜λ₯Ό μ œκΈ°ν•˜κ³  더 잘 μ•Œκ³  μžˆλ‹€κ³  μƒκ°λ˜λ©΄ νƒˆμΆœκ΅¬λ₯Ό μ œκ³΅ν•˜λŠ” 것이 훨씬 λ‚«μŠ΅λ‹ˆλ‹€. κ·Έλ ‡κ²Œ ν•˜λ©΄ λ©λ‹ˆλ‹€.

GNU 병렬 둜 μ „λ‹¬λœ ν•¨μˆ˜ λ‚΄μ—μ„œ httpieλ₯Ό μ‚¬μš©ν•  λ•Œ 이 λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

function call_api {
    local FOO=`http --json --auth $TOKEN: post $HOST/api/foo name="Ε’αΊ½αΉ§αΊ—" < /dev/tty | python3 -c "import json,sys;obj=json.load(sys.stdin);print(obj['result']['id']);"`
    […]
    http --download --auth $TOKEN: GET $HOST/api/bla > /dev/tty
}

export -f call_api
export HOST=…
export TOKEN=…
parallel --env HOST --env TOKEN ::: call_api call_api call_api call_api call_api

μœ„μ˜ 주석 덕뢄에 병렬 ν•¨μˆ˜ 호좜이 이제 μž‘λ™ν•©λ‹ˆλ‹€. λ‚˜μ€‘μ— μ°Έκ³ ν•  수 μžˆλ„λ‘ 이 λŒ“κΈ€μ„ λ‚¨κ²¨μ£Όμ„Έμš” 😊

λ‚˜μ€‘μ— μ°Έμ‘°ν•  수 μžˆλ„λ‘ μš”μ²­ 데이터(key=value)κ°€ μš”μ²­ λ³Έλ¬Έ(stdinμ—μ„œ)보닀 μš°μ„ λ˜μ–΄μ•Ό 함을 HTTPie에 λͺ…μ‹œμ μœΌλ‘œ μ•Œλ¦¬λŠ” 데 μ‚¬μš©ν•  수 μžˆλŠ” CLI 인수 --ignore-stdin κ°€ μžˆμŠ΅λ‹ˆλ‹€.

http --ignore-stdin http://… lorem=ipsum dolor=sit

μ°Έμ‘° https://httpie.org/docs#redirected -μž…λ ₯

for λ£¨ν”„μ—μ„œ http λ₯Ό μ‚¬μš©ν•˜λŠ” λ™μ•ˆ 이 λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. λ‘œμ»¬μ—μ„œλŠ” 잘 μž‘λ™ν–ˆμ§€λ§Œ gitlabμ—μ„œλŠ” μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€. --ignore-stdin λ‹˜μ΄ ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.

stdin을 null </dev/null 둜 λ¦¬λ””λ ‰μ…˜ν•˜λ €κ³  μ‹œλ„ν–ˆμ§€λ§Œ httpieκ°€ μ΄μƒν•˜κ²Œ μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€. μ™œ 그래? λ‚΄ 말은, λͺ…령이 μ‰˜ μžμ²΄μ—μ„œ stdin을 λ¬΄μ‹œν•˜λ„λ‘ ν•˜λŠ” 방법이 μžˆμ–΄μ•Ό ν•˜μ§€ μ•Šκ² μŠ΅λ‹ˆκΉŒ?

@NightMachinary --ignore-stdin μ˜΅μ…˜μ„ μ‚¬μš©ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. 이것이 HTTPieμ—κ²Œ STDIN λ₯Ό 읽지 μ•Šλ„λ‘ μ§€μ‹œν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

$ echo 'this STDIN data is ignored' | http  --ignore-stdin POST httpbin.org/post hello=world

@jakubroztocil http 에 --ignore-stdin $ 이 μ—†μœΌλ©΄ μ‰˜ μžμ²΄μ—μ„œ http 둜 κ°€λŠ” stdin을 μ–΄λ–»κ²Œ μ œκ±°ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

@NightMachinary STDIN (및 기타 ν‘œμ€€ 슀트림)을 μ œκ±°ν•  수 μ—†μ§€λ§Œ 닫을 μˆ˜λŠ” μžˆμŠ΅λ‹ˆλ‹€.

$ echo ignored data | http httpbin.org/anything 0<&-

https://superuser.com/questions/813472/how-do-i-close-stdin-in-a-shell-script

@NightMachinary 와 /dev/null λ¦¬λ””λ ‰μ…˜μ€ μ•½κ°„ λ‹€λ¦…λ‹ˆλ‹€.

$ http httpbin.org/anything < /dev/null

이것은 μ—¬μ „νžˆ ​​열렀 있고 λ¦¬λ””λ ‰μ…˜λœ STDIN 둜 HTTPieλ₯Ό ν˜ΈμΆœν•˜λ―€λ‘œ HTTPieλŠ” 이λ₯Ό 읽고 빈 λ¬Έμžμ—΄λ‘œ λλ‚©λ‹ˆλ‹€. 그런 λ‹€μŒ μš”μ²­ λ³Έλ¬Έ λ°μ΄ν„°λ‘œ ν–‰λ³΅ν•˜κ²Œ μ‚¬μš©ν•  κ²ƒμž…λ‹ˆλ‹€(효과적으둜 기본값은 POST μž…λ‹ˆλ‹€. ), --ignore-stdin 둜 ν•˜μ§€ 말라고 ν•˜μ§€ μ•ŠλŠ” ν•œ.

λ”°λΌμ„œ 기본적으둜 λ‹€μŒκ³Ό λ™μΌν•©λ‹ˆλ‹€.

$ echo -n | http httpbin.org/anything 
이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰