如何在 Ktor 中设置类似于 Retrofit 的`Retrofit.Builder().baseUrl(baseUrl) 的 basePath?

Posted

技术标签:

【中文标题】如何在 Ktor 中设置类似于 Retrofit 的`Retrofit.Builder().baseUrl(baseUrl) 的 basePath?【英文标题】:How to set a basePath in Ktor similar to Retrofit's `Retrofit.Builder().baseUrl(baseUrl)? 【发布时间】:2020-06-09 12:01:06 【问题描述】:

我正在尝试通过转换一些当前使用Retrofit 的现有项目来尝试Ktor

虽然我可以轻松地将请求转换为:

client.get 
    url("$BASE_URL/something/somepage/another")

每次总是将$BASE_URL 添加到所有路径似乎非常乏味。在改造中,我们可以简单地执行以下操作:

Retrofit.Builder()
    .baseUrl(BASE_URL)
    .create(SomeServiceClass::class.java)

我尝试过使用defaultRequest 并在那里设置BASE_URL,但显然你只能设置url.host 而不能设置整个basePath

有没有办法在Ktor 中做同样的事情?或者如果没有,处理此问题的最佳做法是什么?

【问题讨论】:

【参考方案1】:

你可以!

为此,您需要在实例化客户端时设置默认请求。

val httpClient = HttpClient(android) 
        defaultRequest 
            host = "my.zoo.com"
            url 
                protocol = URLProtocol.HTTPS
            
        
    

val response = httpClient.get<List<CatsResponse>>(
        path = "animals/cats"
)

这将调用https://my.zoo.com/animals/cats

希望对你有帮助:)

【讨论】:

我明白了。这只是确认您不能设置基本路径,但可以设置基本 url。我可以再问一个关于 ktor 的问题吗?你能帮我一下吗。你知道如何在 Ktor 中设置 SSL 吗? 在默认请求中,您可以在请求生成器HttpRequestBuilder 中提供任何您想要的内容。查看课程以查看所有选项。 defaultRequest host = "animals.zoo.com" url protocol = URLProtocol.HTTPS //将方案设置为 https。

以上是关于如何在 Ktor 中设置类似于 Retrofit 的`Retrofit.Builder().baseUrl(baseUrl) 的 basePath?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ktor 客户端中设置内容类型字符集(不是接受字符集)

如何在改造库中设置超时?

如何在 Immutablejs 和 Redux 以及 Flux 和 React 中设置类似 Ember 的计算属性

如何以编程方式在 Ktor 中提供 https 请求

如何在 YouTrack 中设置深色主题

Ktor挖坑日记还在用Retrofit网络请求吗?试试Ktor吧