HTTPie๋ ์์คํ ์ธ์ฆ์๋ฅผ ๋ฌด์ํฉ๋๋ค.
http --debug -j https://example_using_my_ca.com
HTTPie 0.9.3
HTTPie data: /home/lukas/.httpie
Requests 2.10.0
Pygments 1.6
Python 3.4.3 (default, Oct 14 2015, 20:28:29)
[GCC 4.8.4] linux
>>> requests.request(**{'allow_redirects': False,
'auth': None,
'cert': None,
'data': '',
'files': DataDict(),
'headers': {'Accept': b'application/json',
'Content-Type': b'application/json',
'User-Agent': b'HTTPie/0.9.3'},
'method': 'get',
'params': ParamsDict(),
'proxies': {},
'stream': True,
'timeout': 30,
'url': 'https://example_using_my_ca.com',
'verify': True})
Traceback (most recent call last):
File "/usr/local/lib/python3.4/dist-packages/requests/packages/urllib3/connectionpool.py", line 578, in urlopen
chunked=chunked)
File "/usr/local/lib/python3.4/dist-packages/requests/packages/urllib3/connectionpool.py", line 351, in _make_request
self._validate_conn(conn)
File "/usr/local/lib/python3.4/dist-packages/requests/packages/urllib3/connectionpool.py", line 814, in _validate_conn
conn.connect()
File "/usr/local/lib/python3.4/dist-packages/requests/packages/urllib3/connection.py", line 289, in connect
ssl_version=resolved_ssl_version)
File "/usr/local/lib/python3.4/dist-packages/requests/packages/urllib3/util/ssl_.py", line 308, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
File "/usr/lib/python3.4/ssl.py", line 365, in wrap_socket
_context=self)
File "/usr/lib/python3.4/ssl.py", line 601, in __init__
self.do_handshake()
File "/usr/lib/python3.4/ssl.py", line 828, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.4/dist-packages/requests/adapters.py", line 403, in send
timeout=timeout
File "/usr/local/lib/python3.4/dist-packages/requests/packages/urllib3/connectionpool.py", line 604, in urlopen
raise SSLError(e)
requests.packages.urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/bin/http", line 11, in <module>
sys.exit(main())
File "/usr/local/lib/python3.4/dist-packages/httpie/core.py", line 115, in main
response = get_response(args, config_dir=env.config.directory)
File "/usr/local/lib/python3.4/dist-packages/httpie/client.py", line 48, in get_response
response = requests_session.request(**kwargs)
File "/usr/local/lib/python3.4/dist-packages/requests/sessions.py", line 475, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python3.4/dist-packages/requests/sessions.py", line 585, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python3.4/dist-packages/requests/adapters.py", line 477, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)
์ฐธ๊ณ ๋ก curl์ ์ ์๋ํฉ๋๋ค : curl https://example_using_my_ca.com
ssl.get_default_verify_paths ()๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ ๊ฒฝ๋ก๋ฅผ ์ป๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ ๋๊น?
๋ค์๊ณผ ๊ฐ์ ํ๋์ ์ ์ํฉ๋๋ค.
--verify์ no ๋๋ yes ์ด์ธ์ ๋งค๊ฐ ๋ณ์๊ฐ ์ ๋ฌ๋๋ฉด ๋งค๊ฐ ๋ณ์๋ฅผ ์์ฒญ์ ์ ๋ฌํฉ๋๋ค.
--verify๊ฐ yes๋ก ์ค์ ๋ ๊ฒฝ์ฐ :
1) REQUESTS_CA_BUNDLE์ด ์ค์ ๋ ๊ฒฝ์ฐ True๋ฅผ ์์ฒญ ํ์ธ์ ์ ๋ฌํฉ๋๋ค.
2) elif ํ๊ฒฝ ๋ณ์ ssl.get_default_verify_paths (). openssl_cafile_env๊ฐ ์ค์ ๋์ด ํ์ธ ์์ฒญ์ ์ ๋ฌํฉ๋๋ค.
4) elif ํ๊ฒฝ ๋ณ์ ssl.get_default_verify_paths (). openssl_capath_env๋ ํ์ธ ์์ฒญ์ ํต๊ณผํ๋๋ก ์ค์ ๋ฉ๋๋ค.
5) elif ssl.get_default_verify_paths (). capath๊ฐ None์ด ์๋๋๋ค. ํ์ธ ์์ฒญ์ ์ ๋ฌํฉ๋๋ค.
6) ๊ทธ๋ ์ง ์์ผ๋ฉด True๋ฅผ ์ ๋ฌํ์ฌ ์์ฒญ ํ์ธ
๊ทธ๋ฌ๋ ssl.get_default_verify_paths๋ python3.4 ์ดํ์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
@luv ๋ 3.4+ ๋ฐ 2.7.10+์์๋ง ์ฌ์ฉํ ์์์๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ํ๋ซํผ์์ ์๋ํ์ง ์์ต๋๋ค. ์ด๊ฒ์ด ์ฌ๋๋ค์ ์ํด ์ด๊ฒ์ ํด๊ฒฐํ๊ธฐ ์ํด ์์ฒญ์ด ์์ฒด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ด์ ์ ๋๋ค. httpie์ ์ง์์ ์ผ๋ก ๋๊ธ์ ๋ฌ์ง ๋ง์ธ์. ์ด๊ฒ์ httpie IMO๊ฐ ์๋ ์์ฒญ์ ์กด์ฌํ๋ ๋ฌธ์ ์ ๋๋ค.
@ sigmavirus24 ๋ญ์ผ ? ๋์์์ด ๋๊ธ์๋ค๋ ๊ฒ์ด ๋ฌด์จ ๋ป์ธ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง, ์ด์จ๋ httpie ๊ธฐ๊ณ ์๋ ์๋๋๋ค. ๋๋ ๋จ์ง ์ด๋ฆฌ์์ ํธ๋กค์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค : /
์๋ํ๋ ๊ตฌํ์ด ์ด๋ป๊ฒ ์๊ฒผ๋์ง ํ์ธํ๊ธฐ ์ํด curl ์์ค ์ฝ๋๋ฅผ ํ ๋์๋ณด๊ธฐ ....
๋ชจ๋ amiga ๋ฐ VMS ifdef์ ๋ค์ํ ssl ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์ง์์ ๋ฌด์ํ๊ณ ์ค์ ๋ก๋ ์ด๋ฆฌ ์๊ณ openssl X509_ * ์กฐํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ง ์์ต๋๋ค (์ : Python SSL ๋ชจ๋์ get_default_verify_paths ()์์ ์ฌ์ฉ๋จ).
๋์ curl์ ์ปดํ์ผ ํ์์ ์๋ ค์ง ์ฌ๋ฌ ์์น๋ฅผ ๋ฐ๋ณต ํ ๋ค์ (์ด m4dness https://github.com/curl/curl/blob/master/acinclude.m4#L2560 ์ฐธ์กฐ) ๋ช ์ ์ ์ผ๋ก (CURL_CA_BUNDLE ๋ฐ ) ๋ฐํ์์ SSL_CERT_DIR ๋ฐ SSL_CERT_FILE ํ๊ฒฝ ๋ณ์ (๋ค์ X509_get_default_cert_file_env ()์ ๊ฐ์ ํญ๋ชฉ์ ์ฌ์ฉํ์ง ์์). ๊ทธ๊ฒ ๋ค์ผ.
๊ทธ๋ ๋ค๋ฉด ์์ํ ํ์ด์ฌ์์ ๋์ผํ ์ ๊ทผ ๋ฐฉ์์ ๊ตฌํํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น? (์, ์ง์ฅ์ฒ๋ผ ๋น ๋ฅด๊ณ ๋๋ฌ์ ๋ณด์ด์ง๋ง curl์์๋ ์๋ํฉ๋๋ค!) ๊ทธ๋ฌ๋ Windows (ssl.enum_certificates?) ๋ฐ OS X ์ง์ ์ถ๊ฐ (์ฌ๊ธฐ์์ ํ์คํ์ง๋ ์์ง๋ง Python์ OS X 10.6 ์ด์์์ ์ฌ๊ณผ ์ ๊ณต openssl ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๊ฐ์ต๋๋ค.) ์ด๋ฏธ ๊ด์ฐฎ์ ๊ฒ์ ๋๋ค!).
@luv ์ ๊ณ @ sigmavirus24 ๋
์ด ๋ฌธ์ ๋ 3.0.0 ๋ฆด๋ฆฌ์ค๊น์ง ์์ฒญ์์ ์์ ๋์ง ์์ต๋๋ค ... ๊ฐ๋ฅํ ํธํ์ฑ ๋ฌธ์ ๋ก ์ธํด SSL_CERT_FILE๋ ์ง์๋์ง ์์ต๋๋ค https://github.com/kennethreitz/requests/pull/2903
btw. ๋๋ ๋ฌด๋กํ๋ค๋ ๋ป์ด ์๋์๋ค. ๋๋ ์ ๋ง๋ก s / ๊ทธ๊ฐ ํธ๋กค๋งํ๊ณ ์๋ค๊ณ ์๊ฐํ๋ค. :) ๋๋ ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ ์ฐพ๊ธฐ ์ํด ๋์ฐ๊ณ ํ ๋ฒ๋ ํ๋ก์ ํธ์ ๊ธฐ์ฌํ์ง ์์ ์ฌ๋์ ์ฐพ์๋ค. ๊ทธ๋ฐ ์ ๋์ ์ธ ๋ฐ์์ ์ ๋ง ๋๋์ต๋๋ค) ๊ธฐ๋ณธ์ ์ผ๋ก ๋์๊ฒ ๋ฅ์น๋ผ๊ณ ๋งํ๊ณ ์์์ต๋๋ค : /
@luv ๋ฅ์น ๋ผ๊ณ ๋งํ์ง
๋ง์ง๋ง์ผ๋ก ์ฝ๋ ๊ธฐ์ฌ ๋ง์ด ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๋ ๊ฒ์ ์๋๋๋ค. ํ๋ก์ ํธ์ ๋ํ ๋ชจ๋ ๊ธฐ์ฌ๋ฅผ๋ณด๊ณ ์ถ๋ค๋ฉด octohatrack ๊ณผ ๊ฐ์ ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋๋ ๊ทธ๋ค์ด ๋งค์ฐ ์์ฒญ '๊ฐ๋ฐ์ ์ํ ํ ์๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ @jkbrzt์ ๋ํ httpie์ ๋ฒ๊ทธ ๊ด๋ จ ์ฌ๋ฌ ์์ฒญ์ ์๋ตํ์ต๋๋ค. ์ฌ๊ธฐ์์ ์์ฒญ ๊ด๋ จ ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ๋ฉด 99 %์ ์๊ฐ์ด ์ด๋ฏธ ์ฒ๋ฆฌ ์ค์ด๊ธฐ ๋๋ฌธ์ ์๋ตํฉ๋๋ค. ์ด ์ข๊ฒ๋ @jkbrzt๋ฅผ ์ํด ๋๋ ์ด์ ์ ์ข์ง ์์ (๊ทธ๋ฆฌ๊ณ ๋ช ๋ฐฐ ๋ ๋์) ์ทจ๊ธ์
์ฐธ๊ณ ๋ก "they"๋ "s / he"๋งํผ ๋ง์ ๋ฌธ์์ด๋ฉฐ ํ ์ฌ๋์ ์ง์นญํ๋ ๋ฐ์๋ ์ฌ์ฉ๋ ์ ์๊ธฐ ๋๋ฌธ์ ํจ์ฌ ๋ ์ผ๋ฐ์ ์ผ๋ก ์ ์ฉ๋ฉ๋๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๋์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์์ต๋๊น?
@jkbrzt ๋๋ ์ด๊ฒ์ ๋ฒ๊ทธ๊ฐ ์๋ ๊ธฐ๋ฅ์ด๋ผ๊ณ ๋ถ๋ฅผ ๊ฒ์ ๋๋ค. Requests๋ Windows, * nixes ๋ฐ BSD์์ ๋์ผํ๊ฒ ์๋ํ๋ฉฐ ์ค์ ๋ก Requests์ ๋ง์ ์์คํ ๋ฐฐํฌ๋ ์ด๋ฌํ ๋์์ ์ ๊ทน์ ์ผ๋ก ์ ๊ฑฐํ๊ณ ์์คํ ์ธ์ฆ์ ์ ์ฅ์ / ๋ฒ๋ค์ ๊ฐ๋ฆฌ ํต๋๋ค. ๋ฐ๋ผ์ ์ฌ์ฉ์๊ฐ์ด ๋์์ ํ์๋กํ๋ ๊ฒฝ์ฐ ์์คํ ๋ฐฐํฌ์๊ฐ HTTPie (๋ฐ ๊ฐ๋ฅํ๋ฉด ์์คํ ํจํค์ง HTTPie)๋ฅผ ์ฌ์ฉํ์ฌ ํจํค์ง ํ Request ๋ฒ์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
"์ด ๋ฌธ์ ํด๊ฒฐ"์ ๊ดํด์๋ ๊ณ ์ ์ ์์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ์ด๊ฒ์ ์์ฒญ์ ์ถ๊ฐ ๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ด๋ ์์ ์์ HTTPie๋ ๋ฌด๋ฃ๋ก ๋์์ ์ป์ต๋๋ค. HTTPie๊ฐ ๋์ ์ด๊ฒ์ ๋ ๋์ ์ฐ์ ์์๋ก ๊ฐ์ฃผํ๋ฉด (@jkbrzt๊ฐ ์ ํฉํ๋ค๊ณ ์๊ฐํ๋ ๋๋ก ์ํ ํ ์ ์์) ๊ฐ๋ฐ ๋ ธ๋ ฅ์ ๋ณต์ ํ์ฌ์ด ์์ ์ ๋ ๋นจ๋ฆฌ ์ํ ํ ์ ์์ต๋๋ค.
Linux, @luv๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ
apt๋ฅผ ํตํด ์ค์น๋ HTTPie์ ๋์ผํ ๋ฌธ์ (ubuntu 14.04lts)
@luv 14.04 ๋ฐ 16.04์ ๋ํ ์์ฒญ์ด ์์คํ ์ธ์ฆ์ ์ ์ฅ์๋ฅผ ์ฌ์ฉํ๋ค๋ ์ฌ์ค์ ์๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋์ต๋๋ค. Requests๋ฅผ ์ด๋ป๊ฒ ์ค์น ํ์ต๋๊น?
httpie์ ์ฐ๋ถํฌ ๋ฐฐํฌํ์ด ์ฌ์ฉ๋๋์ง ํ์ธํ๊ธฐ ์ํด ๋ชจ๋ "์์ฒญ"๋ฐ "httpie"๋ฒ์ ์ ์ ๊ฑฐํ์ผ๋ฉฐ PyPI์ httpie๋ฅผ ์ฌ์ ํ ์ฌ์ฉํ๊ณ ์์์ต๋๋ค. Ubuntu httpie๊ฐ "ImportError : cannot import name is_windows"์ ํจ๊ป ์คํจํ๋ฉฐ ์ด๋ ์๋ ค์ง ๋ฌธ์ ์ ๋๋ค.
์ฒ์์ python3์ ์ฌ์ฉํด์ผํ๊ธฐ ๋๋ฌธ์ "pip3 uninstall"์ ์คํํ๋ ๊ฒ์ ์๊ณ "pip uninstall"๋ง ์คํ ํ ๊ฒ ๊ฐ์ต๋๋ค.
761 ๋ช ์๊ฒ ๋ด httpie ์ค์ ์ ๋ํ ์ค๋ช ๊ณผ ํจ๊ป "์คํธ"์ ๋ณด๋ธ ๊ฒ์ ์ฌ๊ณผ๋๋ฆฝ๋๋ค.
์ ๋ Gentoo Linux, httpie-0.9.9 ๋ฐ requests-2.18.4 (์ต์ Gentoo์์ ์ฌ์ฉ ๊ฐ๋ฅ)๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋ค๋ฅธ ๋๊ตฌ (openssl s_client, sslclient, curl)๋ ์ค์น๋ ๋ก์ปฌ CA ์ธ์ฆ์๋ฅผ ๊ฐ์งํ๊ณ ์ ๋๋ก ์๋ํ์ง๋ง httpie๋ ์คํจํฉ๋๋ค.
$ openssl s_client -quiet -connect localhost:8082
depth=1 CN = Local CA home.lan
verify return:1
depth=0 CN = localhost
verify return:1
^C
$ http -v https://localhost:8082/
http: error: SSLError: HTTPSConnectionPool(host='localhost', port=8082): Max retries exceeded with url: / (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",),)) while doing GET request to URL: https://localhost:8082/
์๋ํ๋๋ก ์ ๋ฐ์ดํธํด์ผํฉ๋๊น?
@powerman ๊ทธ ํจํค์ง์ ์ ํฌ ์ฌ๋ฐฐํฌ ์์๊ฒ ๋ ์ ์ ํ ์ง๋ฌธ์ ๋๋ค.
@ sigmavirus24 ์ ๊ทธ๋ ์ต๋๊น? ๋ด ์ง๋ฌธ์ ์ด๋ฌํ ์์ฒญ / httpie ๋ฒ์ ์ด ์์คํ CA ๋ชฉ๋ก์ ์ฒ๋ฆฌํด์ผํ๋์ง ์ฌ๋ถ์ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ด ์์คํ ์ ๋ฌด์ธ๊ฐ ์๋ชป ๊ตฌ์ฑ๋์๊ฑฐ๋ ๋ฒ๊ทธ๊ฐ์์ ์ ์์ต๋๋ค. ๊ทธ๋ ์ง ์๋ค๋ฉด ์ด๋ค ๋ฒ์ ์ด ํ์ํฉ๋๋ค.
@powerman ์๋ฌด๊ฒ๋ ๋ณ๊ฒฝ๋์ง ์์์ต๋๋ค. ๋ ๋ค ์์คํ ์ธ์ฆ์ ๋ฒ๋ค์ ์ง์ํ์ง ์์ง๋ง ๋ฐฐํฌ์ ํจํค์ง ๊ด๋ฆฌ์์์ ๋ ๋ค ์ค์น ํ ๊ฒฝ์ฐ ์ํํธ์จ์ด๋ฅผ ํจ์นํ์ฌ ์ฌ์ฉํ์ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. ์ ํฌ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ํจํค์ง๋ฅผ ์ฌ์ฉํ๊ณ ์์คํ ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ์ ํฌ ๋ฌธ์ ์ ๋๋ค.
์ฌ๊ธฐ์ ๋ํด ํ ๊ฐ์ง ์ถ๊ฐ ์ค๋ช ์ ์ถ๊ฐํ๊ฒ ์ต๋๋ค. SSL ์์ฒญ์ ํ ๋ ์ฌ์ฉ์์ ํ๋ก์ ์ฌ์ด์ ๋ณด์ ํฐ๋์ ์ค์ ํ ๋ค์ ํ๋ก์์ ๋์ ์ฌ์ด์ ๋ โโ๋ค๋ฅธ ํฐ๋์ ์ค์ ํ๋๋ก ํน๋ณํ ์ค๊ณ๋ ํ๋ก์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ๊ฒํ๋ฉด ํ๋ก์๋ฅผ ํต๊ณผํ๋ ํธ๋ํฝ์ ์์ ํ๊ฒ ๋ชจ๋ํฐ๋งํ์ฌ ์๋ฌด๋ ๋ถ์พํ ์ผ์ํ์ฌ ์จ๊ธฐ๋ ค๊ณ ํ์ง ์๋์ง ํ์ธํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ๋ถํํ๋ httpie๊ฐ ๋ค์ ๊ฐ์ ธ ์ค๋ ์ธ์ฆ์๊ฐ ์ ๋ขฐํ ์ ์์์ ์๋ฏธํฉ๋๋ค (์์คํ ๋ฃจํธ์ ์์ง๋ง httpie๊ฐ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์).
์ค์ ๋ก NixOS์์ ๋์ผํ ๋ฌธ์ ๋ฅผ ์ฌํ ํ ์ ์์ต๋๋ค.
4 ๋ ์ด์ ํ ...