乱码三千 – 分享实用IT技术

乱码三千 – 码出一个新世界


  • 首页

  • 归档

  • 搜索

Springboot中关于如何设置实体类中的部分属性对用户可见性的方案

发表于 2023-04-20

前言

关于实体类的属性对用户的可见性问题, 我们第一时间可能会想到定义一个性的类, 里面只定义需要给用户看见的属性, 然后进行属性值拷贝

显然 这种做法极其不优雅, 实体类一旦增多, 后期维护会非常的累

那有没有轻松一点的方法呢, 能不能某个表的实体类就只创建一个, 然后复用呢

答案是 有的

我们可以使用注解来实现, 根据不同的需求, 选择不同的注解, 具体如下:

需求一

用户在请求接口的时候, 实体类中的某些字段不给用户返回(序列化), 同时也不允许用户传值(反序列化), 比如大部分的实体类中我们都会有createTime和updateTime字段, 像这种是不需要给用户返回的, 同时也不允许用户传值

那么此时我们就可以用到jackson包中的@JsonIgnore注解来实现这一功能, 具体示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Entity
@Table(name = "deleted_user")
data class DeleteUser(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long? = null,

@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss a",
locale = "zh",
timezone = "GMT+8"
)
@JsonIgnore
val createTime: LocalDateTime = LocalDateTime.now(ZoneId.of("GMT+8")),
)

使用该注解后, 哪怕用户刻意传了也不影响数据, 无论用户传与不传都写入的都是默认值

如果我们需要对多个字段进行可见性隐藏, 除了挨个属性添加@JsonIgnore, 我们还可以在类中使用@JsonIgnoreProperties注解来忽略某个属性, 其效果和@JsonIgnore一样, 具体示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Entity
@Table(name = "deleted_user")
@JsonIgnoreProperties(value = ["createTime"])
data class DeleteUser(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long? = null,

@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss a",
locale = "zh",
timezone = "GMT+8"
)
val createTime: LocalDateTime = LocalDateTime.now(ZoneId.of("GMT+8")),
)

需求二

用户在请求接口的时候, 实体类中的某些字段需要给用户返回, 但是不允许用户传值, 比如id字段, 那此时我们可以在类中使用@JsonIgnoreProperties注解, 并设置allowGetters = true即可, 具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Entity
@Table(name = "deleted_user")
@JsonIgnoreProperties(value = ["id"],allowGetters = true)
data class DeleteUser(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long? = null,

@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss a",
locale = "zh",
timezone = "GMT+8"
)
val createTime: LocalDateTime = LocalDateTime.now(ZoneId.of("GMT+8")),
)

需求三

用户在请求接口的时候, 实体类中的某些字段不给用户返回, 但是允许用户传值, 那此时我们可以在类中使用@JsonIgnoreProperties注解, 并设置allowSetters = true即可, 具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Entity
@Table(name = "deleted_user")
@JsonIgnoreProperties(value = ["content"],allowSetters = true)
data class DeleteUser(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long? = null,
val content: String = "",
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss a",
locale = "zh",
timezone = "GMT+8"
)
val createTime: LocalDateTime = LocalDateTime.now(ZoneId.of("GMT+8")),
)

需求四

用户在请求接口的时候, 实体类中的某些字段不给用户返回, 但是允许用户传值, 同时另外某些字段需要给用户返回, 但是不允许用户传值, 这种又该怎么办呢, 此时我们需要用到另外一个注解@JsonProperty, 在这个注解中配置access值, 具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Entity
@Table(name = "deleted_user")
@JsonIgnoreProperties(value = ["id"],allowGetters = true)
data class DeleteUser(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long? = null,
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
val content: String = "",
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss a",
locale = "zh",
timezone = "GMT+8"
)
val createTime: LocalDateTime = LocalDateTime.now(ZoneId.of("GMT+8")),
)

这样一来, 我们在实现id字段只读的同时, 又实现了content字段的可写入但不可见

access属性常用选项:

  • JsonProperty.Access.WRITE_ONLY: 只允许用户传值, 但不给用户返回

  • JsonProperty.Access.READ_ONLY: 只给用户返回该字段, 但不允许用户传值

需要注意的是: @JsonProperty(access = JsonProperty.Access.READ_ONLY注解放置在父类的属性中无效. 具体原因我也不是太清楚

需求五

假如需要给客户端出两个用户接口, 一个只返回用户名, 另一个返回用户名和用户id, 那这种情况下上面的方案就不适用了, 此时我们需要用到注解@JsonView, 分别作用在属性和Controller中的具体接口方法上, 代码如下:

实体类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Entity
@Table(name = "user")
@JsonView(Views::class) //这个地方很关键 首先给所有属性一个默认视图
data class User(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonView(Views.Detail::class)//表示id归属于Detail视图
var id: Long? = null,

@JsonView(Views.Basic::class)//表示username归属于Basic视图
val userName: String = "",
)
//用接口来进行视图分类
interface Views {
interface Basic
interface Detail : Basic
}

Controller类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@CrossOrigin
@RestController
@RequestMapping("/user")
class UserController {


@GetMapping(value = ["/userInfoWithId"])
@JsonView(Views.Detail::class)//返回归属于Detail视图的字段
fun getUserInfoWithId(
request: HttpServletRequest
): BaseEntity<EmptyModel> {
val info = tokenUtil.parseToken(request)
val user = service.getUserInfo(info.id, info.userAccount)
return BaseEntity(data = user)

}


@GetMapping(value = ["/userInfo"])
@JsonView(Views.Basic::class)//返回归属于Basic视图的字段
fun getUserInfo(
request: HttpServletRequest
): BaseEntity<EmptyModel> {
val info = tokenUtil.parseToken(request)
val user = service.getUserInfo(info.id, info.userAccount)
return BaseEntity(data = user)

}
}

此时如果你运行程序请求接口发现返回一个空对象{}, 这是由于没有配置objectMapper, 我们需要在WebConfig中进行配置, 具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@Configuration
open class WebConfig : WebMvcConfigurer {



@Autowired
private val jsonConverter: MappingJackson2HttpMessageConverter? = null

override fun configureMessageConverters(converters: MutableList<HttpMessageConverter<*>>) {
converters.removeIf { mc -> mc is MappingJackson2HttpMessageConverter }
converters.add(jsonConverter!!)
}

@Bean
open fun objectMapper() : ObjectMapper = ObjectMapper().apply {
setSerializationInclusion(JsonInclude.Include.NON_NULL)
registerModule(KotlinModule())
configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)
configure(SerializationFeature.WRITE_DATES_WITH_ZONE_ID, true)

}

@Bean
open fun jsonConverter(objectMapper: ObjectMapper): MappingJackson2HttpMessageConverter =
MappingJackson2HttpMessageConverter(objectMapper)




}

上面WebConfig类是我自己创建的, 你如果没有该类则手动创建一个,继承WebMvcConfigurer, 别忘了添加@Configuration注解

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

推荐一些免费无需登录的ChatGPT网站

发表于 2023-04-19

前言

目前使用ChatGPT进行问题搜索的频率越来越高, 配合百度搜索, 感觉爽到飞起

这里给大家推荐几个目前可以免费使用的ChatGPT网站, 它们大部分都是基于ChatGPT3.5的引擎

免费ChatGPT网站

  1. Letsearches

    官网: 点击进入

  2. Extk

    官网: 点击进入

  3. Aidutu

    官网: 点击进入

  4. Wuguokai

    官网: 点击进入

  5. Aichatos

    官网: 点击进入

  6. Xeasy

    官网: 点击进入

  7. Binjie

    官网: 点击进入

注意: 免费通道存在一定的不稳定性, 如果某个网站无法正常访问, 说明该网站已不可用, 不必太过纠结, 换一个即可

收费的ChatGPT网站

收费的相对来说要稳定许多, 访问速度也相对较快一些

  1. TalkAI

    官网: 点击进入

    每日有两次免费的问答机会, 超出需要包月购买

  2. Vqlai

    官网: [点击进入](https://static.vqlai.com/apps/vchat/)

    需要关注微信公众号才能使用, 首次关注赠送30额度

ChatGPT插件

vscode平台插件
  1. ChatGPT中文版

    image-20230421154452646

    image-20230421161621252

IntelliJ IDEA平台插件
  1. NextChatGPT

    收费插件, 这个需要关注公众号才能使用, 首次赠送30额度

    image-20230421154640851

AI导航

官网: 点击进入

image-20230421173531299

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

解决iframe标签插入视频无法禁止自动播放的问题

发表于 2023-04-19

问题与解决方案

最近发现有瓣音频博客出现多个视频合奏唱戏的问题, 非常影响阅读体验, 于是准备将视频自动播放给禁止了

尝试了几种方案, 不论是加入"allow="autoplay=false""属性还是autoplay=false乃至sandbox都不生效

最后通过在 src 属性的最后面加上&autoplay=no, 问题解决

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

如何将vscode调教成IntelliJ IDEA风格的编辑器

发表于 2023-04-19

前言

最近项目需要使用到vscode, 对于习惯了Android Studio的我来说, 突然切换开发工具一时间有点难以适应, 主要还是IntelliJIDEA的编辑器太香了

之前本来想将Android Studio武装成兼容各种语言的开发神器, 无奈很多插件不兼容, 只能暂时作罢

所以 只能先凑合着用vscode先, 所谓工欲善其事必先利其器, 为了快速进入开发状态, 首先需要将vscode编辑器的风格设置成尽量接近Android Studio

vscode配置剖析

vscode配置主要分为四大块, 每一块的配置都对应一个json文件:

  • 基础设置: 使用setting.json, 主要包含一些编辑器的偏好设置
  • 键盘快捷键设置: 使用keybindings.json
  • 扩展设置: 使用extension.json
  • UI状态设置: 使用globalState.json, 主要包含一些全局UI状态的设置

对vscode进行改造

第一步 对快捷键进行改造
  1. 安装插件IntelliJ IDEA Keybindings

    image-20230421141517074

    我们会发现 这个插件附带了一个通过xml文件快速导入的功能, 接下来我们需要用它

  2. 将Android Studio的配置进行导出

    熟悉IDEA系编辑器的小伙伴应该都知道如何导出配置文件, 这里不过多解释, 直接上图:

    image-20230421141800980

    导出的配置文件是一个zip压缩包, 我们将其解压, 下一步我们会用到里面keymap目录下的xml文件

    image-20230421142945748

  3. 将Android Studio导出的快键键配置文件进行格式转换

    我们按住ctrl+shift+p打开动作指令面板, 然后输入Import IntelliJ Keybindings执行该动作:

    image-20230421142142565

    image-20230421142310878

    image-20230421142347063

    这里可以选择对导入的xml文件中的快捷键进行平台转换,

    由于我的AndroidStudio的配置文件是windows平台导出的, 而我目前使用的是Mac平台,我想继续保持windows的快捷键习惯, 也就是依然使用ctrl而不是cmd

    所以这里我选择了Windows to Windows

    导入xml文件后, 会自动生成已经转换成json格式的快捷键配置:

    image-20230421143240522

  4. 将转换好的配置导入到vscode中

    我们只需要将里面的内容拷贝至vscode的keybindings.json文件中然后保存即可:

    image-20230421143526782

此时, 我们的快捷键就基本改造完毕了, 现在只需双击shift就能打开动作指令面板, 和Android Studio一致, 满意😊

第二步 对vscode外观进行改造

这一步, 具体改造因人而异, 毕竟每个人的需求和审美不同, 大家只需要了解如何修改即可

这里主要是对setting.json文件进行修改,简单说一下我的配置:

  1. 编辑器字体大小调整

    首先vscode默认的外观给我的第一印象就是字太小了, 看着特别费眼

    那么我们进入设置面板, 输入字体, 然后找到setting中编辑字样点击它可以打开setting.json文件:

    image-20230421145930537

    在里面我输入editor.fontSize": 14.5, 将代码字体大小调整成14.5:

    image-20230421150213399

    同理, 如果需要修改字体风格则输入editor.fontFamily

    image-20230421150846461

    以此类推, 所有配置属性都有代码提示, 操作起来也很方便

  2. 工作台字体大小调整

    我们会发现, 通过setting.json我们可以调整编辑器的字体大小, 但是工作台的字体没有提供相关属性配置, 只能通过快捷键cmd+=来进行缩放调整, 如果快捷键无法使用那就使用动作指令面板通过关键字 放大 或者Zoom进行搜索调用

    记住一点 有问题先尝试在动作指令面板中搜一下

  3. 工作目录图标修改

    接下来我们需要调整一下工作目录的图标, 先来看一下vscode默认的目录树长啥样:

    image-20230425101510482

    是不是立马让人感到崩溃, 哪个文件在哪个包下面, 估计得费劲辨别半天

    这个要改的话, 需要在安装图标插件, 我们直接在插件市场搜索关键字icon就行, 可以找到很多:

    image-20230425102237084

    每个都尝试一下, 选一种自己喜欢的就行

  4. 颜色主题选择

    最后我们对编辑器整体的配色进行调整, 可以直接选择现成的主题, 直接在插件市场搜索即可:

    image-20230425100404555

由于个人习惯, 最后我直接选择了JetBrains风格的主题和图标样式:

image-20230425105302696

调整后我的编辑器样子如下:

image-20230425105836206

配置的同步功能

官方自带云端同步

目前vscode编辑器自带了配置同步功能, 实现多端配置同步, 非常方便, 只需要在编辑器左下角进行登录, 然后打开同步功能即可:

image-20230421151643311

这里支持Github或者微软账号登录

云端同步历史恢复

当我们不小心将编辑器还原出厂设置了, 由于我们开启了自动同步功能, 此时所有配置已经同步到了云端, 旧的配置直接被覆盖了, 那么我们想恢复之前的配置该怎么办呢?

不用担心

首先我们打开命令窗口显示已同步的数据记录:

image-20230421154920449

image-20230421155009736

然后选择对应时间下的历史配置文件, 将里面的内容拷贝至我们的当下的配置文件中即可:

image-20230421155426436

手动拷贝有些繁琐, 不过我相信未来官方能实现一键恢复功能

除此之外 我们还可以通过资源管理器的时间线进行文件内容的快速恢复, 不过这种方案仅支持短期时间的恢复, 如果要恢复几个月甚至一年前的配置, 那么只能使用云端同步方案了:

image-20230421171831669

配置文件导出本地

如果你对于这种云端配置同步不是太放心, 还可以将配置文件导出到本地进行存储:

image-20230421152109250

官方默认支持导出到Git和本地

配置文件同步到自己的云端

如果你有更多的同步需求, 比如同步到云盘, 那么我推荐你安装Sync Settings这个插件, 它支持本地、本地Git仓库、远程Git仓库、服务器rsync甚至Webdav:

image-20230421152755860

具体使用方法:

  1. 对仓库进行配置

    动作面板输入:

    1
    Sync Settings: Open the repository settings
  2. 将配置文件上传同步至仓库:

    动作面板输入:

    1
    Sync Settings: Download (repository -> user)
  3. 从仓库中同步配置文件到vscode:

    动作面板输入:

    1
    Sync Settings: Download (repository -> user)

如果你觉得手动同步太累人, 还可以配合cron-tasks插件开启定时任务, 实现配置文件的自动同步功能

问题汇总

关于回车快捷键无法设置的问题

由于两个编辑器的差异性存在, 导致部分快捷键和预想中的不太一致, 此时我们需要手动修改, 这里我需要将acceptAlternativeSelectedSuggestion的快捷键设置为回车, 另外将acceptSelectedSuggestion的快捷键改为tab, 在设置的过程中, 我发现回车无法设置, 这应该是个编辑器bug, 好在可以直接修改json文件:

image-20230421170505429

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

关于Web server failed to start. Port 8080 was already in use

发表于 2023-04-18

前言

Web开发时偶尔会碰到这种错误, 主要是上一次服务未关闭导致的

解决方案

Windows平台
  1. 打开cmd命令窗口,查看被占用端口号所对应的进程

    1
    netstat -aon|findstr "端口号"
  2. 终止对应进程

    1
    taskkill /pid 这里填查询到的pid /f
Mac平台
  1. 查看被占用端口号所对应的进程

    1
    lsof -i:端口号

    image-20230420122833156

  2. 终止对应进程

    1
    kill PID

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

ChatGPT于我而言有如神助 如虎添翼

发表于 2023-04-18

前言

在ChatGPT诞生之前, 如果我们想获取信息一般是通过搜索引擎, 在鱼龙混杂的网页中筛选相对有用的信息, 光是信息筛选甄别就极其消耗时间和脑力

ChatGPT出来后, 大大地简化了这一操作, 它可以帮我们进行大部分的垃圾信息过滤, 从而使得知识的获取变得简单直接

以前的操作流程:

关键词搜索👉鱼龙混杂的信息👉筛选得到各种碎片化的可用信息👉对得到的碎片信息进行可用性验证👉总结归纳

借助ChatGPT的操作流程:

关键词询问👉得到相对合理可靠的信息👉可用性验证->总结归纳

尝试

  1. 周杰伦的主持水平如何😀

    image-20230420103305473

  2. 乱码三千这个博客你觉得怎么样👀

    image-20230420103323216

  3. 你觉得歌手十二越写的歌如何🌹

    image-20230420103336800

  4. 给码box这个平台写一句吸引人的宣传语🤩

    image-20230420103737735

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

关于POST请求的一些细节

发表于 2023-04-18

请求传递参数的方式

POST 请求传递参数有两种方式:

  1. 将数据放在请求体(body)中

    一般用form-urlencoded格式进行编码传递,例如:

    1
    name=value&age=20&gender=male

    这种方式的优点是可以传递大量的数据,安全性较高,传递的数据类型也比较灵活,可以传递文本、文件等。

  2. 将数据放在 URL 查询字符串中

    例如:

    1
    https://www.example.com?name=value&age=20&gender=male

    这种方式的优点是简单易用,实现比较容易,不需要对数据进行编码,对于一些小规模数据传输比较恰当。

以上两种方式在传递数据时都可能存在数据篡改、伪造等问题。一些安全敏感的数据(如密码等)应该采用更安全的传输方式(如加密传输)。

使用请求体传输,数据会按照具体的编码方式进行编码,而使用查询字符串进行传输,数据会经过 URL编码处理,因为URL中只能使用一部分 ASCII 字符,其他字符需要进行转义。

编码方式

POST常用的编码方式有三种, 分别为:

  1. application/x-www-form-urlencoded

    这是最常用的编码方式,也是默认的编码方式。它将请求参数编码成 key1=value1&key2=value2 的形式,并将每个键值对用 & 连接起来。参数会被URL 编码,以便在传输时能够正确地处理特殊字符,例如空格会被转换为加号 (+)。

  2. multipart/form-data

    这种编码方式适用于上传文件或二进制数据。它将请求参数分割成多个部分,每个部分都有一个Content-Disposition 头部和一个Content-Type 头部来描述它的内容类型。这个 Content-Disposition 通常包含一个表单字段的名称和一些其他的元数据,例如上传文件的名称。

  3. application/json

    这种编码方式适用于传输 JSON格式的数据。JSON格式是一种轻量且易于使用的数据表示格式,广泛用于 Web 应用程序中。请求参数将被作为 JSON对象发送,它们必须以正确的 JSON格式进行编码。 需要根据具体的场景和需求选择合适的编码方式。

注意: 使用查询字符串进行传输的数据只能使用application/x-www-form-urlencoded的编码格式,而使用请求体传输则可以使用各种编码格式

GET请求和POST请求的区别

POST 请求和 GET 请求是HTTP 协议中常用的两种请求方法,它们之间的区别如下:

  1. 参数传递方式:GET请求只能通过 URL 中的查询字符串来传递参数,而 POST 请求不仅可以通过URL还可以将参数信息放在请求主体中。

  2. 请求参数长度:GET 请求传递参数的长度是有限制的,具体取决于浏览器和 Web 服务器的限制,而 POST 请求则没有这些限制。

  3. 对服务器数据的影响:GET请求不会改变服务器上的资源状态,只是请求该资源的数据,而 POST 请求可能会改变服务器上的资源状态,如在服务器上创建新的资源或更新已有资源。

  4. 安全性:GET请求会将参数暴露在 URL 中,比较容易被追踪和窃取,而 POST 请求的参数则放在请求主体中,安全性比 GET请求更高。

  5. 使用场景:GET 请求通常用于请求数据,如获取某个页面的内容,而 POST请求用于提交数据,如提交表单信息。

总的来说,GET 请求适合请求数据,而 POST请求适合提交数据。需要根据具体的业务场景和需求选择合适的请求方法。

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

去哪儿找好用的轮子

发表于 2023-04-17

开源大轮子聚集地

  1. Dromara社区

    官网: 点击进入

    image-20230418163057817

  2. Gitee GVP

    官网: 点击进入

    image-20230418165000336

  3. Github 中文社区排行榜

    官网: 点击进入

    image-20230418172752082

    image-20230418172823761

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

CURL的使用技巧

发表于 2023-04-17

前言

curl是一个命令行下工作的文件传输工具, 支持网络请求和文件的上传下载, 非常强大, 很多操作系统默认安装了curl, 比如macOS,Windows, Linux等

当我们在使用无界面的操作系统时, 如果想要模拟网络请求, 此时没有浏览器也没有Postman, 那么curl这个工具就能派上大用场

网络请求

  1. GET请求

    1
    curl -X GET http://baidu.com

    curl默认是GET请求, 所以可以简写成:

    1
    curl  http://baidu.com
  2. POST请求

    1
    curl -X POST http://baidu.com

    同理, 如果是PUT, DELETE请求, 只需修改-X后面的参数即可

  3. 指定请求头

    使用-H指令, 注意大小写:

    1
    curl -X POST -H  "Accept:*/*"  http://baidu.con

    如果需要指定多个请求头, 那么需要填多次-H指令, 如:

    1
    curl -X POST -H  "Accept:*/*" -H  "Content-Type:multipart/form-data" http://baidu.com
  4. 请求时携带请求参数

    使用-d指令, 注意大小写:

    1
    curl -X POST -d "password=11111111&username=3333" http://baidu.con

    默认是以Content-Type:application/x-www-form-urlencoded的形式对参数进行编码

    如果我们需要携带json格式的数据, 那么我们指定相应请求头即可, 如下:

    1
    curl -X POST  -H  "Content-Type:application/json" -d '{"content":"发送一条消息"}'  http://baidu.con
  5. 文件上传

    修改Content-Type为multipart/form-data, 使用-F指令指定需要上传的文件,注意大小写:

    1
    curl -X POST  -H  "Content-Type:multipart/form-data" -F  "file=@文件名称.png"  http://baidu.com
  6. 文件下载

    使用-o指令保存请求到的文件, 注意大小写:

    1
    curl -o "baidu.html" http://www.baidu.com/index.html

    如果使用大写的-O, 同样也能下载, 它会将URL 的最后部分当作文件名, 此时URL`必须写具体, 否则报错:

    1
    curl -O http://www.baidu.com/index.html
  1. 断点续传

    使用-C指令, 一般我们会配合文件下载一起使用:

    1
    curl -C -o "baidu.html" http://www.baidu.com/index.html
  2. 请求跟随服务器的重定向

    使用-L指令, 一般我们会配合文件下载一起使用:

    1
    curl -L -o "baidu.html" http://www.baidu.com/index.html

参考资料

Curl Cookbook

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

一些可视化的开发工具推荐

发表于 2023-04-17

工具推荐

  1. Nginx可视化配置工具

    官网: 点击进入

    image-20230418145011544

  2. 可视化表单生成工具

    官网: 点击进入

    image-20230418150430126

    image-20230418150456156

  3. 正则可视化工具

    官网: 点击进入

    image-20230418150559813

  4. CSS动画可视化

    官网: 点击进入

    image-20230418151815374

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

1…8910…51

乱码三千

android程序员一枚,擅长java,kotlin,python,金融投资,欢迎交流~

505 日志
145 标签
RSS
© 2026 乱码三千
本站总访问量次
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4
0%