Maybe you have confused param
with path
so please read this: https://stackoverflow.com/a/69723043/143475
Otherwise this is the expected behavior: https://stackoverflow.com/a/54477346/143475
EDIT:
If you want "proof" that Karate is doing the right thing, try this 3 line test.
* url 'https://httpbin.org/anything'
* param foo = 'one/two'
* method get
And see how the server processes it correctly (look at the response):
1 > GET https://httpbin.org/anything?foo=one%2Ftwo
1 > Host: httpbin.org
1 > Connection: Keep-Alive
1 > User-Agent: Apache-HttpClient/4.5.13 (Java/11.0.13)
1 > Accept-Encoding: gzip,deflate
20:32:08.757 [main] DEBUG com.intuit.karate - response time in milliseconds: 1576
1 < 200
1 < Date: Mon, 01 Nov 2021 15:02:08 GMT
1 < Content-Type: application/json
1 < Content-Length: 425
1 < Connection: keep-alive
1 < Server: gunicorn/19.9.0
1 < Access-Control-Allow-Origin: *
1 < Access-Control-Allow-Credentials: true
{
"args": {
"foo": "one/two"
}
}