问题标签 [ktor-client]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
494 浏览

http - 使用 Ktor HTTP 客户端(和 kotlinx.io?)直接将可恢复下载到文件

我以前没有使用过(大)HTTP 下载,所以我对这个话题真的不太了解。

所以,我想做的是以编程方式将文件从互联网直接下载到本地文件系统中。如果下载是可恢复的,那也很好。对于 Java,我发现这篇 Baeldung 文章基本上解释了如何做到这一点。

但是,我不使用 Java,而是使用 Kotlin。更具体地说,我使用 Ktor HTTP 客户端(使用 Apache 引擎,但如果需要我可以切换它)。我想知道是否有办法以与上述文章中相同的方式使用此客户端。基本上,我会调用 GET 请求,但我会告诉客户端将字节流式传输到指定File位置。当下载中断时,我会查询当前状态的文件大小,并在这个字节位置(PartialContent)恢复它。

我发现

  1. Ktor服务器支持这一点:https ://ktor.io/docs/partial-content.html
  2. kotlinx-io库可能会有所帮助(因为与文章的类比):https ://github.com/Kotlin/kotlinx-io

但是,我不知道如何将所有东西放在一起并“连接松散的电线”以使其全部工作。似乎我的问题对于简单的谷歌搜索来说太具体了,这就是我现在求助于 SO 的原因。如果任何对 Ktor 和 HTTP 下载有一定经验的人可以为我阐明这一点,我们将不胜感激!

PS在进一步的进展中,这个SO问题的答案也可能很有趣。

版本数据:

  • 科特林/JVM 1.4.20
  • 克托尔 1.4.1
  • 开放JDK 11
0 投票
1 回答
784 浏览

android - 在 Kotlin 多平台项目中使用 Ktor HttpClient 将文件作为二进制文件

我有一个多平台项目,其中 api 代码在 iOS 和 Android 之间共享。

有“put” api 可以将本地音频文件作为二进制文件上传。

我创建了httpclient如下

要将对象放入api中,我正在执行以下操作

它工作正常并将字节数组上传到后端。但是我想将文件作为普通二进制文件上传,而不是字节数组。

为了更清楚,在 Postman mac 应用程序中,我们可以将文件作为二进制文件上传。我需要做类似的事情。

当我签入 Ktor 时,它显示只能以二进制形式提交多部分表单数据。但在我的情况下,它是 Put 请求。

请帮忙。

0 投票
2 回答
1737 浏览

android - kotlinx.serialization.SerializationException:找不到类“MultiPartFormDataContent”的序列化程序

我正在尝试上传多个文件。

我就是这样做的:

但它抛出异常

我也尝试过这种方式,但遇到了同样的问题:

0 投票
1 回答
72 浏览

ktor - Ktor 自定义功能交换网址

我试图在 Ktor 中添加自定义功能。它基本上是一个 url 交换器(我们有一个场景,域可能随时更改,并且无法每次都更新客户端)。

我们获得了可用的交换器列表,并且需要 Ktor 中的 CustomFeature 来根据列表交换 url。但是, context.request 或 request.url - 一切都是 val 并且我无法为请求分配新的 url。

在改造中,它曾经像这样工作

在 Ktor 功能中,我正在尝试这样的事情

这是正确的方法吗?

0 投票
2 回答
1191 浏览

kotlin - 如何禁用 Ktor 客户端 SSL 验证?

我正在尝试从仅在原型设计期间存在的内部测试环境连接到具有自签名证书的服务。Ktor 客户端失败

在这种情况下如何禁用证书验证?

0 投票
1 回答
852 浏览

kotlin - 无法将 io.ktor 导入 Android Studio 中 KMM 的通用模块

所以我是 Kotlin Multiplatform Mobile 和一般移动开发的新手。我正在尝试在 KMM 教程中按照本教程在我的项目中使用 Ktor。

添加依赖后,如下build.gradle.kts所示(commonMain、androidMain、iosMain的依赖):

我试图import io.ktor.client.*在公共模块中创建一个类,但它无法解决。但是,当我尝试对 Android 模块中的一个类做同样的事情时,它就可以工作了。请看下面的截图: 在 Common 模块中导入 在 Android 模块中导入

所以我的问题是:我哪里出错了?或者,它应该是这样的吗?从文档中,我相信我正在尝试做的网络应该在公共模块中完成,而不是在平台特定模块中完成。

请帮忙,我一直在环顾四周以了解问题所在,但没有运气。谢谢!

编辑:我一直在 Android Studio 中收到此通知 问题

我用谷歌搜索了一下,似乎错误通知不正确?

0 投票
2 回答
323 浏览

kotlin - Ktor Client,如何指定body参数

我正在尝试向服务器发送 POST 请求,这篇文章需要参数“电子邮件”和“密码”。但我不知道如何指定参数,我阅读了文档但我不明白。这是我的代码:

0 投票
1 回答
210 浏览

unit-testing - 测试 KtorClient 时减少代码重复

我正在Ktor 客户端之上创建服务。我的有效负载是 XML,因此我的客户端的简化版本如下所示:

请注意附加到自定义数据类的自定义 XMLMapper 的使用。

我想测试这个类,并按照文档

我最终得到了我的测试客户端的以下代码:

现在,我不担心 Mapper 本身,因为我直接测试它。然而困扰我的是,我基本上必须复制客户的完整逻辑来测试行为?这似乎很脆弱,因为例如,如果我明天搬到 Json,它将导致我的测试失败并且必须更新。例如,如果我开始使用响应验证,则相同。对于我正在使用 a 的另一个客户来说更是如此defaultRequest,我也必须完全复制它:

我做错了吗?我测试太多了吗?我很好奇如何改进这一点。

非常感谢您的意见!

PS:不相关,但关于 Ktor 测试的页面提到将依赖项添加到implementation. 听起来我应该改用它testImplementation来避免将 lib 与我的应用程序一起发送?

0 投票
1 回答
364 浏览

kotlin-multiplatform - 尝试在客户端接收数据时,Ktor-websocket 库不执行任何操作

我目前正在尝试将我们的 Kotlin 多平台项目连接到 websockets。我想使用 ktor-websockets 库从我们的后端接收一些更新,但幸运的是,当我运行此代码时,没有任何反应:

有人对 ktor-websockets 库有任何经验吗?几乎没有文档,所以也许我做错了什么。谢谢

0 投票
1 回答
323 浏览

kotlin - 在挂起函数中异步调用 ktor http 客户端

我有以下使用 ktor 的 HttpClient 的函数。tokenService getAccessToken 函数也使用 ktor 客户端并获取令牌。

这是我的简单测试

现在测试由于延迟而通过,延迟为首先获取令牌提供了时间,但是如果我删除延迟,则调用 addUser 函数而不先获取令牌。我的问题是,有没有更好的方法来做到这一点,以避免增加测试延迟。我查看了 Kotlin Flows,但我不知道如何为我的场景实现它。如果你能指出我正确的方向,我将不胜感激。