8000 gh-135056: Add a --header argument to http.server cli. · python/cpython@5f89c97 · GitHub
[go: up one dir, main page]

Skip to content

Commit 5f89c97

Browse files
committed
gh-135056: Add a --header argument to http.server cli.
1 parent 77b5fff commit 5f89c97

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

Lib/http/server.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1048,6 +1048,11 @@ def _main(args=None):
10481048
'(default: %(default)s)')
10491049
parser.add_argument('--cors', action='store_true',
10501050
help='Enable Access-Control-Allow-Origin: * header')
1051+
parser.add_argument('-H', '--header', nargs=2, action='append',
1052+
# metavar='HEADER VALUE',
1053+
metavar=('HEADER', 'VALUE'),
1054+
help='Add a custom response header '
1055+
'(can be used multiple times)')
10511056
args = parser.parse_args(args)
10521057

10531058
if not args.tls_cert and args.tls_key:
@@ -1085,7 +1090,12 @@ class HTTPSDualStackServer(DualStackServerMixin, ThreadingHTTPSServer):
10851090
pass
10861091

10871092
ServerClass = HTTPSDualStackServer if args.tls_cert else HTTPDualStackServer
1088-
response_headers = {'Access-Control-Allow-Origin': '*'} if args.cors else None
1093+
response_headers = {}
1094+
if args.cors:
1095+
response_headers['Access-Control-Allow-Origin'] = '*'
1096+
for header, value in args.header or []:
1097+
response_headers[header] = value
1098+
10891099

10901100
test(
10911101
HandlerClass=SimpleHTTPRequestHandler,
@@ -1096,7 +1106,7 @@ class HTTPSDualStackServer(DualStackServerMixin, ThreadingHTTPSServer):
10961106
tls_cert=args.tls_cert,
10971107
tls_key=args.tls_key,
10981108
tls_password=tls_key_password,
1099-
response_headers=response_headers
1109+
response_headers=response_headers or None
11001110
)
11011111

11021112

Lib/test/test_httpservers.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1399,6 +1399,18 @@ def test_cors_flag(self, mock_func):
13991399
mock_func.assert_called_once_with(**call_args)
14001400
mock_func.reset_mock()
14011401

1402+
@mock.patch('http.server.test')
1403+
def test_header_flag(self, mock_func):
1404+
self.invoke_httpd('--header', 'h1', 'v1', '-H', 'h2', 'v2')
1405+
call_args = self.args | dict(
1406+
response_headers={
1407+
'h1': 'v1',
1408+
'h2': 'v2'
1409+
}
1410+
)
1411+
mock_func.assert_called_once_with(**call_args)
1412+
mock_func.reset_mock()
1413+
14021414
@unittest.skipIf(ssl is None, "requires ssl")
14031415
@mock.patch('http.server.test')
14041416
def test_tls_cert_and_key_flags(self, mock_func):

0 commit comments

Comments
 (0)
0