ktor icon indicating copy to clipboard operation
ktor copied to clipboard

URLConnection works fine but ktor client returns 403 forbidden during a get request

Open dylech30th opened this issue 4 years ago • 4 comments

I'm using ktor 1.3.2 with CIO engine, when I try to send a get request to URL https://1.0.0.1/dns-query?ct=application/dns-json&cd=false&do=false&type=A&name=google.com by the following code:

suspend fun requestJson(hostname: String): DnsResponse {
            HttpClient(CIO) {
                install(JsonFeature) {
                    serializer = KotlinxSerializer()
                }
                install(HttpTimeout)
            }.use {
                return withContext(Dispatchers.IO) {
                    it.get<DnsResponse>("https://1.0.0.1/dns-query?ct=application/dns-json&cd=false&do=false&type=A&name=google.com") {
                        timeout {
                            requestTimeoutMillis = 5000
                        }
                    }
                }
            }
        }

an error occurred with the message Exception in thread "main" io.ktor.client.features.ClientRequestException: Client request(https://1.0.0.1/dns-query?ct=application%2Fdns-json&cd=false&do=false&type=A&name=google.com) invalid: 403 Forbidden, but when I try to access this URL by using a browser or postman or even using the old-school URLConnection in java, it works fine and returns the correct response, for example, the code

val url = URL("https://1.0.0.1/dns-query?ct=application/dns-json&cd=false&do=false&type=A&name=google.com")
    val conn = url.openConnection() as HttpURLConnection
    conn.connect()
    val bf = BufferedReader(InputStreamReader(conn.inputStream))
    var line: String = ""
    while (bf.readLine().let { if (it == null) false else {line += it; true} }) {

    }
    println(line)

will print

{"Status":0,"TC":false,"RD":true,"RA":true,"AD":false,"CD":true,"Question":[{"name":"google.com","type":1}],"Answer":[{"name":"google.com","type":1,"TTL":59,"data":"172.217.5.78"}]}

and everything looks fine

dylech30th avatar Jul 08 '20 23:07 dylech30th

Please check the following ticket on YouTrack for follow-ups to this issue. GitHub issues will be closed in the coming weeks.

oleg-larshin avatar Aug 10 '20 15:08 oleg-larshin

Most likely this server supports only HTTP/2 protocol but the CIO engine supports the only HTTP/1.1. As a workaround use the Jetty engine.

Stexxe avatar Mar 23 '21 10:03 Stexxe

Facing the same issue Fatal Exception: io.ktor.client.features.ClientRequestException: Client request(URL) 403 invalid and using ktor v1.6.3. Is this issue fixed? If so, in which version?

vkarthikeyan avatar Mar 13 '24 09:03 vkarthikeyan

This exception is thrown by the response validation. In Ktor 1.*, the response validation is enabled by default.

Stexxe avatar Mar 13 '24 11:03 Stexxe