问题标签 [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 投票
3 回答
2912 浏览

kotlin - 在 Ktor 中,如何将 InputStream 流式传输到 HttpClient 请求的正文中?

我正在使用Ktor 1.2.2,并且我有一个 InputStream 对象,我想将其用作我提出的 HttpClient 请求的主体。在 Ktor 0.95 之前,这个InputStreamContent对象似乎就是这样做的,但它已在 1.0.0 版本中从 Ktor 中删除(不幸的是无法弄清楚原因)。

我可以使用 ByteArrayContent 使其工作(参见下面的代码),但我宁愿找到一个不需要将整个 InputStream 加载到内存中的解决方案......

这段代码是一个简单的测试用例,模拟了我想要实现的目标:

如果我错过了任何相关信息,请告诉我,

谢谢!

0 投票
1 回答
897 浏览

kotlin - 在 Ktor 客户端中编码 URL

我需要使用 Ktor 客户端发出 GET 请求。我正在使用的 URL 作为字符串从我无法控制的来源传递给我。URL 字符串包含由 Ktor 客户端编码的逗号,%2C这会破坏后端逻辑。有没有办法阻止 Ktor 对 URL 进行编码?

举例说明:

在下面的代码中,值为urlishttps://my.domain/someData,someMoreData但传出请求 URL 为https://my.domain/someData%2CsomeMoreData

0 投票
1 回答
1731 浏览

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

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

虽然我可以很容易地将请求转换为:

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

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

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

0 投票
0 回答
126 浏览

ktor - 如何连接到 ktor 服务器上的外部 api

我有一个 ktor 服务器,它向我的 android 客户端公开一个 API。它有自己的数据库、一些注册结构和所有标准的东西。但是现在,我的数据库的一部分正在填充来自 3rd 方数据库的数据,我只能通过它自己的 API 访问这些数据。这意味着我的服务器本身就是一个客户端。我知道这可能不是最好的结构,但现在就是这样。所以我认为我的服务器需要一个 HTTPClient。为此,我需要使用一个引擎,但我应该使用与我用于服务器的引擎相同的引擎吗?如何在我的 DI Koin 中设置它,以便我的服务可以访问 HTTPClient(工厂或单一)现在我像这样设置服务器部分:

应用程序.conf

我应该更改我的 main()、丢失 application.conf 并手动编写代码以便使用相同的引擎吗?

0 投票
1 回答
3593 浏览

kotlin - Ktor 客户端身份验证功能不发送授权标头

我正在尝试在 Kotlin/MPP(多平台)项目中使用ktor 客户端,并且在 JVM 目标功能上,基本身份验证似乎没有效果。

这是一个重现的例子:

观察

从记录器输出中,您可以看到客户端没有发送Authorization标头,但是当我手动提供此类标头时我没有遇到任何问题:

第一个请求(失败示例:)

第二个请求(成功示例:)

环境

  • 科特林:1.4-M1

Ktor 工件 1.3.1 版:

  • ktor 客户端核心
  • ktor 客户端日志记录
  • ktor 客户端 json
  • ktor 客户端序列化
  • ktor-client-auth-basic

我错过了什么?

0 投票
0 回答
712 浏览

httpclient - Ktor 服务器应用程序不断增加开放连接

嗨,我最近在服务器上部署了 ktor 服务器项目作为我的应用程序使用的 rest api 后端。我正在使用 netty 并在具有系统服务的服务器上运行它。Ktor 服务器在端口 7171 上运行,每当我检查与端口 7171 的连接时,它都会不断增加。我正在检查这个命令

经过一天的连接数 20k+ 和服务器崩溃后,没有任何工作。

我认为一些连接保持开放。在日志中我没有收到任何错误,除了像connection reset by peer.

我还将 HttpClient 与 Apache 一起使用,并用于缓存数据列表,我将数据存储在伴随对象中,因此不会每次都从数据库中获取它。

我查看了代码,对以上两件事只有怀疑。

这些是我的 gradle 依赖项

目前我有大约 7k 用户,最大并发用户为 450。请指导我如何检查问题并找出问题。

这是 HttClient 代码:

另外请检查我的 api 响应标头,我认为 keepalive 应该有一些到期时间? 在此处输入图像描述

0 投票
3 回答
4491 浏览

kotlin - 在 ktor HTTPClient 中解析错误正文

我有一个 api,它在发送错误请求时返回带有正确错误信息的错误正文。例如,我得到状态码 400 和以下正文 -

现在,当我为此在多平台模块中编写 ktor 客户端时,我会在响应验证器中捕获它,例如 -

我在这里的查询是我无法访问validateResponse或中的响应错误正文handleResponseException。有没有办法我可以捕获并解析它以获取服务器发送的实际错误?

0 投票
1 回答
1075 浏览

kotlin - 使用 ktor 检查多部分请求正文中是否存在所有参数

我正在尝试使用 ktor 创建一个多部分请求,其代码如下,

上面的代码或rest api工作正常,但问题是,我想检查所有参数是否可用,即我想发送附加参数以及格式如下的文件,

我在这里举一个例子,我想要什么

在这里,无论参数是什么,我们传递的都会自动转换成 pojo 类,如果我们没有传递它,它会抛出异常,

所以,我想用多部分实现类似的事情。

0 投票
2 回答
2351 浏览

ktor - 无法在 kotlin js 中使用 ktor 客户端发布请求

我正在尝试发出 http post 请求,但由于无法理解的原因而失败。

BlockquoteIllegalStateException {message_8yp7un$_0:“发送正文失败。内容具有类型:OwnerMapper 类,但应为 OutgoingContent。”,cause_th0jdv$_0:空,堆栈:“captureStack↵Exception↵RuntimeException↵IllegalSta…↵↵↵↵↵↵↵↵ ↵↵↵↵↵↵↵↵↵promiseReactionJob@[本机代码]”,名称:“IllegalStateException”}

添加序列化插件后,出现此错误:

“找不到类 OwnerMapper 的无参数序列化程序。对于泛型类,例如列表,请明确提供序列化程序。”

我遵循了官方示例,但无法使其运行。我正在使用 Kotlin/Js,以上错误来自浏览器。

0 投票
1 回答
377 浏览

kotlin - 如何覆盖 logRequest/logResponse 以在 Ktor 客户端日志记录中记录自定义消息?

目前,ktor 客户端日志记录实现如下,它按预期工作,但不是我想要的。

上面在查看日志时会产生一场噩梦,因为它正在记录每一行。由于我是 Kotlin 和 Ktor 的初学者,我很想知道如何改变这种行为。由于在 Kotlin 中,除非特别打开,否则所有类都是最终类,我不知道如何修改logRequest函数行为。我理想地想要实现的是下面的例子。

任何帮助将不胜感激