Kotlin 网络请求小例子(Ktor)

news2025/1/21 8:56:01

文章目录

  • 导入依赖
  • 创建 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"/>......
    

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最强总结!18个机器学习核心算法模型!!

前言 大家好~在学习机器学习之后&#xff0c;你认为最重要的算法模型有哪些&#xff1f;今儿的内容涉及到 线性回归逻辑回归决策树支持向量机朴素贝叶斯K近邻算法聚类算法神经网络集成方法降维算法 我把每种算法模型的核心公式和代码也列举了出来&#xff0c;如果有其他比较重…

自动化测试-Selenium-元素定位

一.元素定位 因为使用selenium进行自动化测试&#xff0c;元素定位是必不可少的&#xff0c;所以这篇文章用于自动化测试中的selenium中的元素定位法。 1.根据id属性进行定位&#xff08;id是唯一的&#xff09; id定位要求比较高&#xff0c;要求这个元素的id必须是固定且唯…

vue的elementUI的el-tree的选择

有一棵树型的数据,需要实现:在外部加一个 全选和不全选的按钮,去全部勾选树结构里面每一项的选框。 当点击勾选全选的时候,树的每一项都勾选; 当取消全选的时候,树的每一项都不勾选; 当选树的其中一项时,全选按钮是半选状态; 实现效果如下: <template><…

JVM(Java虚拟机)、JMM(Java内存模型)笔记

面试常见&#xff1a; 请你谈谈你对JVM的理解?java8虚拟机和之前的变化更新?什么是OOM&#xff0c;什么是栈溢出StackOverFlowError? 怎么分析?JVM的常用调优参数有哪些?内存快照如何抓取&#xff1f;怎么分析Dump文件&#xff1f;谈谈JVM中&#xff0c;类加载器你的认识…

上位机图像处理和嵌入式模块部署(f407 mcu开发板基本测试)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 我们拿到一个新的开发板之后&#xff0c;一般都需要测试一下基本功能。这里面一部分功能是我们比较熟悉的&#xff0c;比如说led、key输入、串口、…

计算机网络学习2

文章目录 信道复用技术 第三章数据链路层概述数据链路层的三个重要问题封装成帧和透明传输差错检测可靠传输的相关基本概念可靠传输的实现机制停止等待协议回退N帧协议选择重传协议 点对点协议PPP共享式以太网网络适配器和MAC地址CSMA_CD协议的基本原理共享式以太网的争用期共享…

跨平台数据整合:电商企业如何获取多渠道销售数据

跨平台数据整合对于电商企业而言&#xff0c;是获取多渠道销售数据、提升市场竞争力、优化销售策略的关键环节。以下将从数据来源、数据获取方式、数据整合策略以及整合后的应用等方面&#xff0c;详细阐述电商企业如何进行跨平台数据整合&#xff0c;以获取多渠道销售数据。 一…

C51学习归纳4 --- 矩阵键盘

一、开发板原理图 我们可以看到这个键盘是4*4的&#xff0c;行可以由4个数据接口接收&#xff08;P1_4~7&#xff09;&#xff0c;列可以由4个数据接口接收&#xff08;P1_0~3)。 所以我们可让行作为扫描方向&#xff0c;或者列作为扫描方向&#xff0c;进行按键扫描。如何扫描…

银行风控建模

风控简介 所谓风险控制&#xff08;风控&#xff09;&#xff0c;即针对用户风险进行管理规避的过程。 贷前阶段&#xff1a; 这一阶段的数据来源主要分为申请信息、历史消费信息、外部信息&#xff08;例如多投借贷、公积金等&#xff09;。常用风控模型包括&#xff1a; 1…

『 Linux 』文件系统

文章目录 磁盘构造磁盘抽象化 磁盘的寻址方式磁盘控制器磁盘数据传输文件系统Inode数据块(Data Blocks)超级块(SuperBlock)块组描述符(Group Descriptor)格式化 磁盘构造 磁盘内部构造由磁头臂,磁头,主轴,盘片,盘面,磁道,柱面,扇区构成; 磁头臂&#xff1a;控制磁头的移动,可以…

WowTab:简洁界面,效率神器,重塑新标签页浏览体验

目录 一、插件简介 二、插件功能 2.1 支持两种模式切换 2.2 效率组件介绍 2.3 设置中心 三、使用总结 四、插件安装说明 4.1 Edge安装 4.2 Chrome安装 大家在日常办公当中&#xff0c;是不是觉得新标签页太平淡无奇&#xff1f;来&#xff0c;给自己的浏览器加点料&…

uniapp学习(001 前期介绍)

零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战&#xff0c;开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第1p-第p10的内容 简介 目录结构 效果 打包成小程序 配置开发者工具 打开安全按钮 使用uniapp的内置组件…

计算机网络学习实践:模拟PPP协议验证虚拟局域网(VLAN)

计算机网络实践&#xff1a;模拟PPP协议&&验证虚拟局域网&#xff08;VLAN&#xff09; 挺有意思的大家可以跟着做一做&#xff0c;我是跟着韩志刚老师的视频做的 https://www.bilibili.com/video/BV1Qr4y1N7cH?p31&vd_source7831c5b97cfc5c745eb48ff04f6515e7 …

PostgreSQL 17 Beta1 发布,酷克数据再次贡献核心力量

得益于全球的开发者贡献&#xff0c;PostgreSQL已成长为一款拥有众多全球用户和贡献者、成熟稳定的开源数据库。2024年5月23日&#xff0c;PostgreSQL全球开发组宣布&#xff0c;PostgreSQL 17的首个 Beta 版本现已开放下载。本次新版本带来了众多惊喜。值得一提的是&#xff0…

算法金 | 再见,PCA 主成分分析!

1. 概念&#xff1a;数据降维的数学方法 定义 主成分分析&#xff08;PCA&#xff09;是一种统计方法&#xff0c;通过正交变换将一组可能相关的变量转换为一组线性不相关的变量&#xff0c;这组新的变量称为主成分。大白话&#xff0c;PCA能够从数据中提取出最重要的特征&am…

深入JVM:全面解析GC调优

文章目录 深入JVM&#xff1a;全面解析GC调优一、序言二、GC调优指标三、GC在线监控1、Jstat工具2、VisualVM工具 四、GC日志分析1、收集GC日志2、GCViewer工具3、GCeasy工具 五、GC问题调优1、调整JVM内存大小&#xff08;1&#xff09;调整堆内存大小及比例&#xff08;2&…

从头搭hadoop集群--分布式hadoop集群搭建

模板虚拟机安装配置见博文&#xff1a;https://blog.csdn.net/weixin_66158110/article/details/139236148 配置文件信息如下&#xff1a;https://pan.baidu.com/s/1074eD5aNVugEPcjwVvi9jA?pwdl1xq&#xff08;提取码&#xff1a;l1xq&#xff09; hadoop版本&#xff1a;h…

行车记录仪人体感应雷达开关模块,飞睿智能雷达模块穿透玻璃、告别漏触烦恼,安防停车监控新方案

随着汽车保有量的持续增长&#xff0c;行车记录仪作为汽车安全配件的必备品&#xff0c;其重要性日益凸显。然而&#xff0c;传统的行车记录仪传感器在停车时往往存在无法穿透玻璃、漏触等问题&#xff0c;给车主带来了诸多不便和安全隐患。本文将深入探讨停车场景下&#xff0…

2024年清洁能源与可持续发展国际会议(ICDESMF 2024)

2024 International Conference on Clean Energy and Sustainable Development 【1】大会信息 会议简称&#xff1a;ICDESMF 2024 大会时间&#xff1a;2024-07-22 大会地点&#xff1a;中国大理 截稿时间&#xff1a;2024-07-08(以官网为准&#xff09; 审稿通知&#xff1a…

【云原生】Kubernetes----POD控制器

目录 引言 一、Pod控制器概述 二、Pod控制器的种类 &#xff08;一&#xff09;ReplicaSet &#xff08;二&#xff09;Deployment &#xff08;三&#xff09;StatefulSet &#xff08;四&#xff09;DaemonSet &#xff08;五&#xff09;Job 三、使用POD控制器 &a…