[http] Improve escaping of URLs (#17110)

* [http] Improve escaping of URLs

Signed-off-by: Jan N. Klug <github@klug.nrw>
This commit is contained in:
J-N-K
2024-07-24 12:20:45 +02:00
committed by GitHub
parent bb26e978c2
commit fd4dd89bb1
3 changed files with 5 additions and 5 deletions
+2 -2
View File
@@ -37,9 +37,9 @@ Authentication might fail if redirections are involved as headers are stripper p
_Note:_ If you rate-limit requests by using the `delay` parameter you have to make sure that the time between two refreshes is larger than the time needed for one refresh cycle.
**Attention:** `baseUrl` (and `stateExtension`/`commandExtension`) should not use escaping (e.g. `%22` instead of `"` or `%2c` instead of `,`).
**Attention:** `baseUrl` (and `stateExtension`/`commandExtension`) don't normally require percent encoding (e.g. `%22` instead of `"` or `%2C` instead of `,`).
URLs are properly escaped by the binding itself before the request is sent.
Using escaped strings in URL parameters may lead to problems with the formatting (see below).
When automatic encoding is not possible (e.g. because you need to include an encoded `=` or `&` in the query string) you can use manual encoding with a doubled `%` (`%%3D` instead of `=`).
## Channels
@@ -66,7 +66,7 @@ public class Util {
URL url = new URL(s);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), IDN.toASCII(url.getHost()), url.getPort(),
url.getPath(), url.getQuery(), url.getRef());
return URI.create(uri.toASCIIString().replace("+", "%2B"));
return URI.create(uri.toASCIIString().replace("+", "%2B").replace("%25%25", "%"));
}
/**
@@ -69,9 +69,9 @@ public class UtilTest {
@Test
public void uriAlreadyPartlyEscapedTest() throws MalformedURLException, URISyntaxException {
String s = "https://foo.bar/zzl.html?p=field%2Bvalue&foostatus=This is a test String&date=2024- 07-01";
String s = "https://foo.bar/zzl.html?p=field%%2Bvalue&foostatus=This is a test String&date=2024- 07-01";
assertEquals(
"https://foo.bar/zzl.html?p=field%252Bvalue&foostatus=This%20is%20a%20test%20String&date=2024-%20%2007-01",
"https://foo.bar/zzl.html?p=field%2Bvalue&foostatus=This%20is%20a%20test%20String&date=2024-%20%2007-01",
Util.uriFromString(s).toString());
}