Kotlin 网络请求小例子(Ktor)

文章目录

  • 导入依赖
  • 创建 Http 客户端

其实还是借着 Ktor 学一学 Kotlin 如何导入依赖,这应该是我们 Kotlin 基础专栏的最后一期了。

Ktor 是 Kotlin 官方的一个网络请求库,它具有优秀且精炼的 API,并且是跨平台的。

本教程参考自 Ktor 文档 Create a client application。

导入依赖

  1. 找到项目的build.gradle.kts文件,双击打开。
  2. 在文件中找到dependencies
    plugins {
        kotlin("jvm") version "2.0.0"
    }
    
    group = "ink.awning"
    version = "1.0-SNAPSHOT"
    
    repositories {
        mavenCentral()
    }
    
    // 我们的依赖将在此处导入
    dependencies {
        testImplementation(kotlin("test"))
    }
    
    tasks.test {
        useJUnitPlatform()
    }
    kotlin {
        jvmToolchain(21)
    }
    
  3. dependencies中添加 Ktor 的依赖
    dependencies {
        testImplementation(kotlin("test"))
        // Ktor
        implementation("io.ktor:ktor-client-core:2.3.11")
        implementation("io.ktor:ktor-client-cio:2.3.11")
    }
    
  4. 因为这其实是 Kotlin 脚本文件,我们也可以在其中写 Kotlin 代码,可以把 Ktor 版本定义为一个变量并引用它,方便以后版本更改。
    dependencies {
        testImplementation(kotlin("test"))
        // Ktor
        val ktorVersion = "2.3.11"
        implementation("io.ktor:ktor-client-core:$ktorVersion")
        implementation("io.ktor:ktor-client-cio:$ktorVersion")
    }
    
  5. 最后,我们看到右上方,会有一个小小的大象图标,点击它,等待下载完成即可。
    在这里插入图片描述
  6. 如果不小心点到了×,也可以在右侧边栏点击大象图标,右键点击项目名,点击重新加载 Gradle 项目。
    在这里插入图片描述

创建 Http 客户端

  1. main函数标记为suspend可挂起函数。
    suspend fun main() {
    
    }
    
  2. 创建一个HttpClient对象:
    import io.ktor.client.*
    import io.ktor.client.engine.cio.*
    
    
    suspend fun main() {
        val httpClient = HttpClient(CIO)
    }
    
  3. 发送get请求
    import io.ktor.client.*
    import io.ktor.client.engine.cio.*
    import io.ktor.client.request.*
    
    
    suspend fun main() {
        val httpClient = HttpClient(CIO)
    
        val response: HttpResponse = httpClient.get("https://kotlinlang.org/")
        print(response)
    }
    
    可以看到打印出了HttpResponse[https://kotlinlang.org/, 200 OK],是200 OK,说明已经请求成功
    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
    SLF4J: Defaulting to no-operation (NOP) logger implementation
    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
    HttpResponse[https://kotlinlang.org/, 200 OK]
    

    Note:可以看到在HttpResponse前还有一些其他的内容,这是日志库SLF4J的内容,它提示找不到相关类,但并不影响代码的运行。如果你看着很烦,可以在build.gradle.kts加入相关依赖解决:

    dependencies {
    	testImplementation(kotlin("test"))
    	// Ktor
    	val ktorVersion = "2.3.11"
    	implementation("io.ktor:ktor-client-core:$ktorVersion")
    	implementation("io.ktor:ktor-client-cio:$ktorVersion")
    	// slf4j
    	implementation("org.slf4j:slf4j-log4j12:2.0.13")
    }
    
  4. 获取响应文本
    我们可以使用HttpResponse.bodyAsText()方法获取返回的文本:
    import io.ktor.client.*
    import io.ktor.client.engine.cio.*
    import io.ktor.client.request.*
    import io.ktor.client.statement.*
    
    
    suspend fun main() {
        val httpClient = HttpClient(CIO)
        val response = httpClient.get("https://kotlinlang.org/")
        print(response.bodyAsText())
    }
    
    数据很长,这是 html,因为本文章并不是专门讲解网络请求,就大概看一眼就行。有时候网站会抽风无法访问,在你请求时可能刚好无法访问,会直接异常。我在写文章时,https://ktor.io/就抽风了,只能换成https://kotlinlang.org/
    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
    SLF4J: Defaulting to no-operation (NOP) logger implementation
    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
    <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><link rel="icon" href="/assets/images/favicon.svg?v2" type="image/svg+xml"/>......
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/685266.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

f1c100s 荔枝派 系统移植

一。交叉编译环境配置 1.1下载交叉工具链&#xff1a;https://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/arm-linux-gnueabi/ 1.2解压安装 在home目录下新建 工程目录&#xff1a;mkdir f1c100s_project 将windows下的gcc-linaro-7.2.1-2017.11-x86…

AI大模型日报#0606:智谱AI开源GLM-4-9B、Pika再融5.8亿

导读&#xff1a;AI大模型日报&#xff0c;爬虫LLM自动生成&#xff0c;一文览尽每日AI大模型要点资讯&#xff01;目前采用“文心一言”&#xff08;ERNIE 4.0&#xff09;、“零一万物”&#xff08;Yi-Large&#xff09;生成了今日要点以及每条资讯的摘要。欢迎阅读&#xf…

Ubuntu虚拟机安装(基于Vmware17)

Ubuntu虚拟机安装&#xff08;基于Vmware17&#xff09; Ubuntu和CentOS是两种流行的Linux发行版&#xff0c;Ubuntu默认安装了图形化桌面环境&#xff0c;对于新手来学习相对来说较为友好&#xff0c;能够满足日常的学习和使用。CentOS则通常被用于服务器环境&#xff0c;常运…

【再探】Java—Java 沙箱机制与类加载器

沙箱&#xff08;Sandbox&#xff09;机制是将Java程序限定在JVM特定的运行范围内&#xff0c;并严格限制代码对本地系统资源的访问&#xff0c;以保证代码的有效隔离&#xff0c;防止对本地系统造成破坏。 1 安全模型 类在加载过程中&#xff0c;类加载器会为类设置初始的安…

天润融通助力浪鲸卫浴,智能化革新引领客户服务新高度

头部家装品牌如何用优质服务抓住客户&#xff1f; 每年初春&#xff0c;万物复苏的同时&#xff0c;家装市场也正式进入旺季。 因为春天气温回升&#xff0c;潮气逐渐散去&#xff0c;开始进入最适合施工的季节&#xff0c;木材不易变形、油漆不易起皮&#xff0c;再加上春季…

【iOS】——Runtime学习

文章目录 一、Runtime介绍二、Runtime消息传递三、实例对象、类对象、元类对象四、isa_t结构体的具体实现五、cache_t的具体实现六、class_data_bits_t的具体实现七、Runtime消息转发动态方法解析备用接收者完整消息转发 一、Runtime介绍 iOS的Runtime&#xff0c;通常称为Obj…

人形机器人:工业领域的得力助手

人行机器人近2年显示出强劲的增长势头&#xff0c;根据最新数据预测&#xff0c;到2026年&#xff0c;中国人形机器人产业规模将突破200亿元&#xff0c;这一数字预示着人形机器人在未来社会中将扮演更加重要的角色。 在工业领域&#xff0c;由于工业环境复杂多变&#xff0c;对…

音视频直播(一)

协议基础篇 直播协议基础推流与拉流推流拉流 直播传输协议RTMP传输协议 && HTTP-FLV协议为什么RTMP做推流&#xff0c;反而很少做拉流&#xff1f;HTTP-FLV协议 RTSP协议HLS协议SRT协议 WebRTC协议应用于直播 直播协议基础 从网络上搜寻到的有关推流与拉流的示意图 从…

STM32F103VE和STM32F407VE的引脚布局

STM32F103VE vs STM32F407VE 引脚对比表 引脚 STM32F103VE STM32F407VE 备注 1 VSS VSS 地 2 VDD VDD 电源 3 VSSA VSSA 模拟地 4 VDDA VDDA 模拟电源 5 OSC_IN OSC_IN 外部时钟输入 6 OSC_OUT OSC_OUT 外部时钟输出 7 NRST NRST 复位 8 PC13 (GPIO) PC13 (GPIO) GPIO 9 PC14 (…

【MySQL】sql语句之表操作(上)

序言 在上一篇的数据库操作的内容中&#xff0c;学习了两种属性和常用的七种操作&#xff0c;学习是循序渐进的&#xff0c;库的操作学完了&#xff0c;就要开始学习表的操作了&#xff0c;而表可与数据强相关&#xff0c;比如DDL&#xff0c;即数据定义语言&#xff0c;DML&am…

JVMの静、动态绑定异常捕获JIT即时编译

在说明静态绑定和动态绑定之前&#xff0c;我们首先要了解在字节码指令的层面&#xff0c;JVM是如何调用方法的&#xff1a; 例如我有以下的代码&#xff0c;很简单就是在main方法中调用了另一个静态方法&#xff1a; public class MethodTest {public static void main(Strin…

小程序 UI 风格美不胜收

小程序 UI 风格美不胜收 小程序 UI 风格美不胜收

论文阅读《SELECTIVE DOMAIN-INVARIANT FEATURE FOR GENERALIZABLE DEEPFAKEDETECTION》

作者&#xff1a;Yingxin Lai、 Guoqing Yang1、Yifan He2、Zhiming Luo、Shaozi Li 期刊&#xff1a;ICASSP-2024 目的&#xff1a;解决泛化性的问题&#xff0c;提出了3个模块 论文整体的架构图&#xff1a;&#xff08;挑选域特征不变&#xff0c;减少对图像内容或者风格…

完全平方数

完全平方数 完全平方数动态规划 完全平方数 给你一个整数 n &#xff0c;返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数&#xff0c;其值等于另一个整数的平方&#xff1b;换句话说&#xff0c;其值等于一个整数自乘的积。例如&#xff0c;1、4、9 和 16 都是…

289M→259M得物包体积治理实践

一、前言 iOS应用的包体积大小是衡量得物性能的重要指标&#xff0c;过大包体积会降低用户对应用的下载意愿&#xff0c;还会增加用户的下载等待时间以及用户手机的存储空间&#xff0c;本文重点介绍在包体积治理中的新思路以及原理与实践。 二、原理介绍 Macho产物测试 我…

想要修改word文档怎么移除编辑权限?学会这两个方法,轻松搞定

日常办公和学习中&#xff0c;Word文档是我们不可或缺的工具。然而&#xff0c;有时我们可能会遇到一些设置了编辑权限的文档&#xff0c;这可能是由于文档的创建者希望控制文档的修改和传播&#xff0c;或者是因为文档在某些共享或协作环境中被设置为只读模式。在这种情况下&a…

网工内推 | 网络运维工程师,H3CIE认证优先,13薪,享股票期权

01 畅读 &#x1f537;招聘岗位&#xff1a;高级网络运维工程师 &#x1f537;职责描述&#xff1a; 1.负责线上业务网络技术运维工作&#xff0c;保障并优化线上网络质量&#xff1b; 2.规划并构建公司线上业务网络架构&#xff1b; 3.规划线上业务网络质量评估与监控体系&…

mysql中 redo日志(上)

大家好。我们知道InnoDB 存储引擎是以页为单位来管理存储空间的&#xff0c;我们进行的增删改查操作其实本质上都是在访问页面。而在真正访问页面之前&#xff0c;需要把在磁盘上的页缓存到内存中的Buffer Pool之后才可以访问。那么我们思考一个问题&#xff1a;如果我们只在内…

vue2中使用tinymce

vue2中使用tinymce的记录 本篇文章主要实现的功能&#xff1a; &#xff08;1&#xff09;【查看】时禁用编辑 &#xff08;2&#xff09;【编辑】时某些内容是不可编辑的 &#xff08;3&#xff09;【内容】前端拼接编辑器模板 &#xff08;4&#xff09;【内容】编辑器模板中…

【漏洞复现】锐捷校园网自助服务系统 login_judge.jsf 任意文件读取漏洞(XVE-2024-2116)

0x01 产品简介 锐捷校园网自助服务系统是锐捷网络推出的一款面向学校和校园网络管理的解决方案。该系统旨在提供便捷的网络自助服务&#xff0c;使学生、教职员工和网络管理员能够更好地管理和利用校园网络资源。 0x02 漏洞概述 校园网自助服务系统/selfservice/selfservice…