Skip to content

Commit d567cc4

Browse files
committed
fix: fix request url in request log #17
1 parent ae62119 commit d567cc4

File tree

2 files changed

+20
-9
lines changed

2 files changed

+20
-9
lines changed

http_helper.py

+13-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,19 @@ def get_mime_type_from_content_type(content_type: str | None) -> str | None:
99
return content_type.split(';')[0].strip()
1010

1111

12-
def get_host_from_url(url: str) -> str:
13-
return urlparse(url).hostname
12+
def get_host_with_port_from_url(url: str) -> str:
13+
parsed = urlparse(url)
14+
port = ''
15+
if parsed.port is not None:
16+
port = f':{parsed.port}'
17+
return f'{parsed.hostname}{port}'
18+
19+
20+
def url_replace_host(url: str, new_host: str | None) -> str:
21+
if new_host is None:
22+
return url
23+
parsed = urlparse(url)
24+
return parsed._replace(netloc=new_host).geturl()
1425

1526

1627
def parse_query_params(url: str) -> list[tuple[str, str]] | None:

proxy_server.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from multidict import CIMultiDict
77

88
from environment import Environment
9-
from http_helper import parse_query_params, get_host_from_url, http_remove_not_forwardable_headers
9+
from http_helper import parse_query_params, get_host_with_port_from_url, http_remove_not_forwardable_headers, url_replace_host
1010
from proxy_log import ProxyLog, ProxyLogPhase, HttpHeaders, ContentStorage, RequestEntry
1111

1212

@@ -16,15 +16,19 @@ async def handle_proxy(request: aiohttp.web.Request):
1616
try:
1717
environment: Environment = request.app.get('environment')
1818
destination = environment.PROXY_DESTINATION
19-
host_from_destination = get_host_from_url(destination)
19+
host_from_destination = get_host_with_port_from_url(destination)
2020
forward_headers = CIMultiDict(request.headers)
2121
if environment.PROXY_OVERRIDE_HOST_HEADER:
2222
forward_headers['host'] = host_from_destination
2323
request_headers = HttpHeaders.create_by(forward_headers)
2424
http_remove_not_forwardable_headers(forward_headers)
25+
request_query_params = request.query_string
26+
if request_query_params:
27+
request_query_params = f'?{request_query_params}'
28+
destination_url = f'{destination}{request.path}{request_query_params}'
2529
log = proxy_log.new_entry(
2630
method=request.method,
27-
url=str(request.url), headers=request_headers,
31+
url=url_replace_host(str(destination_url), forward_headers['host']), headers=request_headers,
2832
query_parameters=parse_query_params(str(request.url))
2933
)
3034
async with (aiohttp.ClientSession() as session):
@@ -35,10 +39,6 @@ async def handle_proxy(request: aiohttp.web.Request):
3539
log = log.mutate(ProxyLogPhase.REQUEST_BODY_READING)
3640
proxy_log.put(log)
3741
data = await request.read()
38-
request_query_params = request.query_string
39-
if request_query_params:
40-
request_query_params = f'?{request_query_params}'
41-
destination_url = f'{destination}{request.path}{request_query_params}'
4242
print(f'{request.method} {request.url} -> {destination_url}...')
4343
log = log.mutate(ProxyLogPhase.REQUEST_FORWARD)
4444
log.forward_destination = destination_url

0 commit comments

Comments
 (0)