HTTP ํ๋กฌํํธ*๋ ์ค์ HTTP ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ํด httpie.core.main()
ํจ์์ ํฌ๊ฒ ์์กดํฉ๋๋ค. ๋ค์ด์ค๋ ์ฟ ํค ์ค์ ๊ณผ ๊ฐ์ ์ผ๋ถ HTTP ํ๋กฌํํธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด Python์์ ์๋ต ๊ฐ์ฒด(๋ณด๋ค ๊ตฌ์ฒด์ ์ผ๋ก requests.Response
์ ์ก์ธ์คํด์ผ ํ์ง๋ง httpie.core.main()
๋ ์ด๋ฌํ API๋ฅผ ์ ๊ณตํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ HTTP Prompt๋ sys.settrace()
๋ฅผ ์ฌ์ฉํ์ฌ HTTPie๋ฅผ "ํดํน"ํ์ฌ ๋ค์ ์ฝ๋์ ๊ฐ์ด httpie.core.get_response()
์์ ๋ฐํ๋ ์๋ต ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
https://github.com/eliangcs/http-prompt/blob/cbd092299/http_prompt/execution.py#L430
HTTPie๊ฐ ๊ฐ๋ฐ์๊ฐ ๋ด๋ถ ์๋ต ๊ฐ์ฒด์ ๋ ์ฝ๊ฒ ์ก์ธ์คํ ์ ์๋ API๋ฅผ ์ ๊ณตํ ์ ์๋์ง ๊ถ๊ธํฉ๋๋ค.
* ์์ง ๋ชจ๋ฅด์๋ ๋ถ๋ค์ ์ํด: HTTP Prompt๋ HTTPie์ ๋ํํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ๋ํผ์ ๋๋ค.
๋ค, ์ดํด๊ฐ ๋ฉ๋๋ค. ์ด์ ๋ํด ์ดํด๋ณด๊ฒ ์ต๋๋ค. main()
๋ ์ข
๋ฃ ์ํ ์ฝ๋์ ์ต์ข
HTTP ์๋ต์ ๋ชจ๋ ๋ฐํํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ง๋ parse args๋ ๋ฐํํ๋ ๋ฐ ์ ์ฉํ ๊ฒ์
๋๋ค.
@eliangcs ์ ๋ ๋ ํฐ ๋ฆฌํฉํ ๋ง์ ํ๊ณ ์์ผ๋ฉฐ ํ์ฌ ๋๊ตฌ์์ ์ฌ์ฉํ ์์ ์ ์ด๊ณ ๋ฌธ์ํ๋ api.py
๋ชจ๋์ ๊ฐ๋ ๊ฒ์ด ์ข์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฏ๋ก ๋ด๋ถ ๋๊ตฌ๋ฅผ ๊ฑด๋๋ฆด ํ์๊ฐ ์์ต๋๋ค. ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ณํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค.
http-prompt
ํ์ฌ HTTPie์์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฌด์ธ๊ฐ๋ฅผ ํ๋์ํ ์ ์์ต๋๊น? args๊ฐ ์๋ ๋น ๋ฉ์๋์ ๋ฐํ ๊ฐ์ด ์๋ ๋ช ๊ฐ์ง ๊ฐ๋จํ ๋
์คํธ๋ง์ด๋ฉด ์ถฉ๋ถํฉ๋๋ค. ์ข์ ์ถ๋ฐ์ ์ http-prompt
ํ์ํ ๋ชจ๋ ์์
ํ์ ๋์ดํ๋ ๊ฒ์
๋๋ค.
// ์ฐธ์กฐ @mblayman
@jkbrzt ๋ด ์ฝ๋๋ฒ ์ด์ค์ ๋ํด grep์ ์ํํ์ต๋๋ค. ๋ด๊ฐ ์ฐพ์ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
# http_prompt/cli.py
from httpie.plugins import FormatterPlugin # just to avoid cyclic import, not really used
from httpie.output.formatters.colors import Solarized256Style # to support solarized theme
# http_prompt/execution.py
from httpie.context import Environment # to construct a custom Environment and pass it to httpie_main
from httpie.core import main as httpie_main # to generate output and the response object
HTTPony๋ HTTPie์ API๋ฅผ ๊ฑฐ์ ๊ฑด๋๋ฆฌ์ง ์์ต๋๋ค. ๋ค์์ผ๋ก ์ ํ๋ฉ๋๋ค.
from httpie.cli import parser
from httpie.context import Environment
from httpie.output import streams
์ํ๋๋ ์์
์ ํต์ฌ์ requests.models.Request
๋ฅผ streams.build_output_stream
ํ๊ณ streams.write_stream
ํธ์ถํ๋ ๊ฒ์
๋๋ค. https://github.com/mblayman/httpony/blob/master/httpony/application.py ์์ ์ผ์ด๋๋ ๋ชจ๋ ์ผ
๊ฐ์ฌํฉ๋๋ค. ๋๋ ๊ทธ๊ฒ์ ํต๊ณผํ๊ณ ๊ทธ๊ฒ์ด ์๋ฏธ๊ฐ์๋ ๊ฒ๋ค์ ๊ณต์ํ ํ ๊ฒ์
๋๋ค. ๊ทธ๋ฐ ๋ค์ httpie.api
์ ๋ช ๊ฐ์ง ๋ํผ๋ฅผ ๋ง๋ค๊ฑฐ๋ ์ฒ์๋ถํฐ ํด๋น ๊ฐ์ฒด๋ฅผ ๋ชจ๋์์ ๊ฐ์ ธ์ฌ ์ ์๋๋ก ๋ง๋ญ๋๋ค.
์ด๊ฒ์ ๋ช
์์ ์ธ ์ฌ์ฉ์๊ฐ ๊ทธ๊ฒ์ ์์กดํ ์ ์๊ณ /์์ ์ ์๊ณ ๋ด๋ถ์ ๋นํด ์์ ์ฑ์ ์ด๋ ์ ๋ ๋ณด์ฅํฉ๋๋ค. httpie.api
-exported ๊ธฐ๋ฅ์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ๋ ๋ณ๊ฒฝ ๋ก๊ทธ์ ํฌํจ๋์ด์ผ ํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
HTTPony๋ HTTPie์ API๋ฅผ ๊ฑฐ์ ๊ฑด๋๋ฆฌ์ง ์์ต๋๋ค. ๋ค์์ผ๋ก ์ ํ๋ฉ๋๋ค.
์ํ๋๋ ์์ ์ ํต์ฌ์
requests.models.Request
๋ฅผstreams.build_output_stream
ํ๊ณstreams.write_stream
ํธ์ถํ๋ ๊ฒ์ ๋๋ค. https://github.com/mblayman/httpony/blob/master/httpony/application.py ์์ ์ผ์ด๋๋ ๋ชจ๋ ์ผ