如何在 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 客户端中设置内容类型字符集(不是接受字符集)