From 57e4c420bb6cefa0b30537e41e6bdb391b055c7d Mon Sep 17 00:00:00 2001 From: Sylvester Kaczmarek <16242628+sylvesterkaczmarek@users.noreply.github.com> Date: Tue, 18 Aug 2026 16:38:22 +0100 Subject: [PATCH 1/2] fix: percent-encode spaces in request path segments --- .../src/main/kotlin/com/openai/core/http/HttpRequest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openai-java-core/src/main/kotlin/com/openai/core/http/HttpRequest.kt b/openai-java-core/src/main/kotlin/com/openai/core/http/HttpRequest.kt index 7dfa41d18..64acef3f6 100644 --- a/openai-java-core/src/main/kotlin/com/openai/core/http/HttpRequest.kt +++ b/openai-java-core/src/main/kotlin/com/openai/core/http/HttpRequest.kt @@ -21,7 +21,7 @@ private constructor( if (!endsWith("/")) { append("/") } - append(URLEncoder.encode(segment, "UTF-8")) + append(URLEncoder.encode(segment, "UTF-8").replace("+", "%20")) } if (queryParams.isEmpty()) { From 20de775cb86ddbf978ee0da624a127b61b8e828d Mon Sep 17 00:00:00 2001 From: Sylvester Kaczmarek <16242628+sylvesterkaczmarek@users.noreply.github.com> Date: Tue, 18 Aug 2026 16:38:40 +0100 Subject: [PATCH 2/2] test: distinguish path and query space encoding --- .../kotlin/com/openai/core/http/HttpRequestTest.kt | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/openai-java-core/src/test/kotlin/com/openai/core/http/HttpRequestTest.kt b/openai-java-core/src/test/kotlin/com/openai/core/http/HttpRequestTest.kt index 7a0fa54ce..e450ab15a 100644 --- a/openai-java-core/src/test/kotlin/com/openai/core/http/HttpRequestTest.kt +++ b/openai-java-core/src/test/kotlin/com/openai/core/http/HttpRequestTest.kt @@ -34,13 +34,21 @@ internal class HttpRequestTest { .build(), expectedUrl = "https://api.example.com/users/123/profile", ), - PATH_SEGMENT_WITH_SPECIAL_CHARS( + PATH_SEGMENT_WITH_SPACE( HttpRequest.builder() .method(HttpMethod.GET) .baseUrl("https://api.example.com") .addPathSegment("user name") .build(), - expectedUrl = "https://api.example.com/user+name", + expectedUrl = "https://api.example.com/user%20name", + ), + PATH_SEGMENT_WITH_LITERAL_PLUS( + HttpRequest.builder() + .method(HttpMethod.GET) + .baseUrl("https://api.example.com") + .addPathSegment("a+b") + .build(), + expectedUrl = "https://api.example.com/a%2Bb", ), SINGLE_QUERY_PARAM( HttpRequest.builder()