Skip to content

Commit e5aa74f

Browse files
authored
Remove URL credentials (httpx integration) (#2020)
* Remove URL credentials (httpx) * Add CHANGELOG
1 parent d7cc194 commit e5aa74f

File tree

5 files changed

+20
-2
lines changed

5 files changed

+20
-2
lines changed

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2222

2323
### Fixed
2424

25+
- `opentelemetry-instrumentation-httpx` Remove URL credentials
26+
([#2020](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/2020))
2527
- `opentelemetry-instrumentation-urllib`/`opentelemetry-instrumentation-urllib3` Fix metric descriptions to match semantic conventions
2628
([#1959](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1959))
2729

instrumentation/opentelemetry-instrumentation-httpx/pyproject.toml

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ dependencies = [
2828
"opentelemetry-api ~= 1.12",
2929
"opentelemetry-instrumentation == 0.44b0.dev",
3030
"opentelemetry-semantic-conventions == 0.44b0.dev",
31+
"opentelemetry-util-http == 0.44b0.dev",
3132
]
3233

3334
[project.optional-dependencies]

instrumentation/opentelemetry-instrumentation-httpx/src/opentelemetry/instrumentation/httpx/__init__.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ async def async_response_hook(span, request, response):
206206
from opentelemetry.trace import SpanKind, TracerProvider, get_tracer
207207
from opentelemetry.trace.span import Span
208208
from opentelemetry.trace.status import Status
209+
from opentelemetry.util.http import remove_url_credentials
209210

210211
_logger = logging.getLogger(__name__)
211212

@@ -269,7 +270,7 @@ def _extract_parameters(args, kwargs):
269270
# In httpx >= 0.20.0, handle_request receives a Request object
270271
request: httpx.Request = args[0]
271272
method = request.method.encode()
272-
url = request.url
273+
url = remove_url_credentials(str(request.url))
273274
headers = request.headers
274275
stream = request.stream
275276
extensions = request.extensions

instrumentation/opentelemetry-instrumentation-httpx/tests/test_httpx_integration.py

+14
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,13 @@ def perform_request(
604604
return self.client.request(method, url, headers=headers)
605605
return client.request(method, url, headers=headers)
606606

607+
def test_credential_removal(self):
608+
new_url = "http://username:password@mock/status/200"
609+
self.perform_request(new_url)
610+
span = self.assert_span()
611+
612+
self.assertEqual(span.attributes[SpanAttributes.HTTP_URL], self.URL)
613+
607614

608615
class TestAsyncIntegration(BaseTestCases.BaseManualTest):
609616
response_hook = staticmethod(_async_response_hook)
@@ -664,6 +671,13 @@ def test_basic_multiple(self):
664671
)
665672
self.assert_span(num_spans=2)
666673

674+
def test_credential_removal(self):
675+
new_url = "http://username:password@mock/status/200"
676+
self.perform_request(new_url)
677+
span = self.assert_span()
678+
679+
self.assertEqual(span.attributes[SpanAttributes.HTTP_URL], self.URL)
680+
667681

668682
class TestSyncInstrumentationIntegration(BaseTestCases.BaseInstrumentorTest):
669683
def create_client(

tox.ini

+1-1
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,7 @@ commands_pre =
386386

387387
grpc: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-grpc[test]
388388

389-
falcon{1,2,3},flask{213,220},django{1,2,3,4},pyramid,tornado,starlette,fastapi,aiohttp,asgi,requests,urllib,urllib3v{1,2},wsgi: pip install {toxinidir}/util/opentelemetry-util-http[test]
389+
falcon{1,2,3},flask{213,220},django{1,2,3,4},pyramid,tornado,starlette,fastapi,aiohttp,asgi,httpx{18,21},requests,urllib,urllib3v{1,2},wsgi: pip install {toxinidir}/util/opentelemetry-util-http[test]
390390
wsgi,falcon{1,2,3},flask{213,220},django{1,2,3,4},pyramid: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-wsgi[test]
391391
asgi,django{3,4},starlette,fastapi: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-asgi[test]
392392

0 commit comments

Comments
 (0)