]> git.basschouten.com Git - openhab-addons.git/commitdiff
[http] Improve escaping of URLs (#17110)
authorJ-N-K <github@klug.nrw>
Wed, 24 Jul 2024 10:20:45 +0000 (12:20 +0200)
committerGitHub <noreply@github.com>
Wed, 24 Jul 2024 10:20:45 +0000 (12:20 +0200)
* [http] Improve escaping of URLs

Signed-off-by: Jan N. Klug <github@klug.nrw>
bundles/org.openhab.binding.http/README.md
bundles/org.openhab.binding.http/src/main/java/org/openhab/binding/http/internal/Util.java
bundles/org.openhab.binding.http/src/test/java/org/openhab/binding/http/UtilTest.java

index 720ab6dd84d76bf7bb41be12d9b5ba4e2608bc3c..9313712a24b0f1d8be1872f5a0118a27d86399ca 100644 (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
 
index 2c490ba5d5a714b7331f0a247afc0c02f02be141..adad2a3d50c917ec2235c635e6ee31f3d617c9da 100644 (file)
@@ -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", "%"));
     }
 
     /**
index b5a8d3e40a1bda7ffb01b70914fb8f3bc1dd1180..b87e499f67c2543165e5823fab88c13e1ab0175f 100644 (file)
@@ -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());
     }