diff --git a/hyper/cli.py b/hyper/cli.py index 6eed9e10..7e862154 100644 --- a/hyper/cli.py +++ b/hyper/cli.py @@ -164,7 +164,14 @@ def set_request_data(args): body, headers, params = {}, {}, {} for i in args.items: if i.sep == SEP_HEADERS: - headers[i.key] = i.value + if i.key: + headers[i.key] = i.value + else: + # when overriding a HTTP/2 special header there will be a leading + # colon, which tricks the command line parser into thinking + # the header is empty + k, v = i.value.split(':', 1) + headers[':' + k] = v elif i.sep == SEP_QUERY: params[i.key] = i.value elif i.sep == SEP_DATA: diff --git a/test/test_cli.py b/test/test_cli.py index 7bae3f96..2928b2c6 100644 --- a/test/test_cli.py +++ b/test/test_cli.py @@ -110,11 +110,20 @@ def test_cli_with_system_exit(argv): {'method': 'GET', 'url.path': '/?param=test'}), (['POST', 'example.com', 'data=test'], {'method': 'POST', 'body': '{"data": "test"}'}), + (['GET', 'example.com', ':authority:example.org'], + {'method': 'GET', 'headers': { + ':authority': 'example.org'}}), + (['GET', 'example.com', ':authority:example.org', 'x-test:header'], + {'method': 'GET', 'headers': { + ':authority': 'example.org', + 'x-test':'header'}}), ], ids=[ 'specified "--debug" option', 'specified host and additional header', 'specified host and get parameter', 'specified host and post data', + 'specified host and override default header', + 'specified host and override default header and additional header', ]) def test_parse_argument(argv, expected): args = parse_argument(argv)