19.1 HTTP客户端-HTTP协议、GET请求、POST请求

news2024/11/23 8:43:08

1. HTTP协议

TCP/IP协议栈由上至下分为以下四层:

  • 应用层:为用户提供应用服务时的通信活动
    • DNS、FTP(文件传输)、HTTP(超文本传输)
  • 传输层:网络中两台计算机之间的数据传输
    • TCP、UDP、SPX
  • 网络层:网络中相邻节点之间的数据帧传送
    • IP、IPX 
  • 链路层:构成网络传输介质的各种基础设施
    • 以太网、ADSL、TD-LTE

通过协议栈传输数据包的过程,本质上就是不断封装与解封在的过程。

发送数据时,应用层组织处HTTTP数据,由传输层封装TCP首部,网络层封装IP首部,链路层封装以太网首部,以以太网包的形式在网内传输;

接收数据时,将接收到的以太网包在链路层解析其以太网首部,其余部分传递给网络层解析IP首部,传递给传输层解析TCP首部,最后得到HTTP数据传递给应用层。

作为TCP/IP协议的一部分,HTTP协议工作在协议栈的最高层——应用层,负责为用户提供针对超文本数据的网络应用,如:

  • Apache、Nginx、IIS、各种浏览器,等等

借助curl可以了解客户端发送给服务器的HTTP请求。

  • curl -v "https://ifconfig.io/ip"
    • GET /ip HTTP/2 // 请求类型 访问路径 协议
    • Host: ifconfig.io // 主机域名
    • User-Agent: curl/7.63.0 // 客户端信息
    • Accept: */* // 期望接收的内容类型

Go语言的HTTP客户端功能齐备,在最基本的情况下,它为各种选项提供了合理的默认设置,让开发者可以无需关心底层,同时也提供了细粒度的控制。

 2. GET请求

通过Go语言标准库net/http包的Get函数,可以直接向服务器发送GET请求

  • GET请求用于从服务器获取数据
  • 对于从服务器获取一些数据而言,使用默认参数配置的客户端和请求头,完全够用
  • 例如:客户端可以通过向https://ifconfig.io/ip发送GET请求,来获取自己的IP地址
    • response, err := http.Get("https://ifconfig.io/ip")
    • resBody, err := ioutil.ReadAll(response.Body)
    • fmt.Printf("%s", resBody) // 124.207.192.18

// 发送简单的GET请求
// 标准库的net/http包提供了一个快捷的方法,可用于发送简单的GET请求
package main
import (
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
)

func main() {
    response, err := http.Get(
        "https://ifconfig.io/ip")
    if err != nil {
        log.Fatal(err)
    }
	defer response.Body.Close()

    resBody, err := ioutil.ReadAll(response.Body)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("%s", resBody)
}
// 打印输出:
xxx.xxx.xxx.xxx ip地址

 3. POST请求

通过Go语言标准库net/http包的Post函数,可以直接向服务器发送Post请求。

  • POST请求用于向服务器提交数据。
  • 调用Post函数除了需要指定访问路径,还需要提供被提交的数据及其内容类型
  • 例如:客户端可以通过向https://httpbin.org/post发送POST请求,来获取自己的信息
    • postData := strings.NewReader(`{"some": "json"}`)// 构建基于字符串的输入流
    • response, err := http.Post("https://httpbin.org/post", "application/json", postData)// 参数解析:访问路径,数据格式,输入流
    • resBody, err := ioutil.ReadAll(response.Body)
    • fmt.Printf("%s", resBody) // %s将字节切片转化为字符串来打印
// 发送简单的POST请求
// 标准库的net/http包提供了一个快捷 
// 的方法,可用于发送简单的POST请求
package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
    "strings"
)

func main() {
    postData := strings.NewReader(
        `{"some": "json"}`)
	response, err := http.Post(
        "https://httpbin.org/post",
        "application/json", postData)
    if err != nil {
        log.Fatal(err)
    }

    defer response.Body.Close()

    resBody, err := ioutil.ReadAll(response.Body)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("%s", resBody)
}

 https://httpbin.org是一个用于测试HTTP客户端的工具,向/post路径发送POST请求,服务器将返回客户端发送给它的数据及一些客户端相关信息。

// 返回的信息:
{
  "args": {}, 
  "data": "{\"some\": \"json\"}", 
  "files": {}, 
  "form": {}, 
  "headers": {
    "Accept-Encoding": "gzip", 
    "Content-Length": "16", 
    "Content-Type": "application/json", 
    "Host": "httpbin.org", 
    "User-Agent": "Go-http-client/2.0", 
    "X-Amzn-Trace-Id": "Root=1-5e3fb89c-66cc30b444d9340656de5fbc"
  }, 
  "json": {
    "some": "json"
  }, 
  "origin": "xxx.xxx.xxx.xxx", // 客户端ip,已隐去 
  "url": "https://httpbin.org/post"
}

 

 

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

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

相关文章

百问网全志V853开发板烧录开发板系统教程

烧录开发板系统 注意:此方式烧录进的文件系统是ubifs文件系统,如果操作 需要网络文件系统挂载或者使用TF卡,不推荐使用。 准备工作 1.100ASK-V853-Pro开发板 x1 2. 下载全志线刷工具AllwinnertechPhoeniSuit 3. TypeC线 X2、12V电源线X1 4…

怎么恢复电脑删除的文件?4个策略恢复数据!

“不知道大家有什么方法可以恢复电脑上删除的文件吗?一不小心删除了部分文件,希望能得到大家的帮助。” 我们的电脑里会存储着很多重要的数据,包括各种重要的文件、照片、资料等。在使用电脑时,有时候可能会由于各种误操作导致它们…

PostgreSQL 多表连接不同维度聚合统计查询

摘要:在本文中,你将学习到如何使用 PostgreSQL 完全外连接,从两个或多个表中聚合维度统计数据。 文章目录 一、常用的连接类型图示二、数据库表设计示例三、连接查询示例1. inner join 内连接(不能满足维度统计需求)2. full join 完全外连接(满足维度统计需求)一、常用的…

环保空调的制冷量和耗电量是多少呢

环保空调的制冷量和耗电量因具体型号、功率以及使用情况而异。以下是一些关于环保空调制冷量和耗电量的详细解释和归纳: 制冷量 原理:环保空调主要利用水蒸发吸热的物理原理进行降温,这种降温方式能够带来显著的冷却效果。效果:…

【NLP】给Transformer降降秩,通过分层选择性降阶提高语言模型的推理能力

【NLP】给Transformer降降秩,通过分层选择性降阶提高语言模型的推理能力 文章目录 【自然语言处理-论文翻译与学习】序1、导论2、相关工作3、相关工具4、方案5、实验5.1 使用 GPT-J 对 CounterFact 数据集进行彻底分析5.1.1 数据集中的哪些事实是通过降阶恢复的&…

C++ 引用 - 引用的特点|在优化程序上的作用

引用是C 的一个别名机制,所谓别名,就是同一块内存共用多个名字,每个名字都指的是这片空间,通过这些别名都能访问到同样的一块空间。 就像鲁迅和周树人是同一个人。 ——鲁迅 一、引用的基本用法 int a 10; int& ref a; // …

磁盘管理 磁盘介绍 MBR

track:磁道,就是磁盘上同心圆,从外向里,依次1号、2号磁道..... sector:扇区,将磁盘分成一个一个扇形区域,每个扇区大小是512字节,从外向里,依次是1号扇区、2号扇区... cy…

LLVM Cpu0 新后端 系列课程总结

想好好熟悉一下llvm开发一个新后端都要干什么,于是参考了老师的系列文章: LLVM 后端实践笔记 代码在这里(还没来得及准备,先用网盘暂存一下): 链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?…

基于springboot实现问卷调查系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现问卷调查系统演示 摘要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,问卷信息因为其管理内容繁杂,管理数…

【全开源】Java AI绘画MJ绘画源码小程序APP公众号源码AI绘图

🎨 探索AI绘画的奥秘 一、引言:AI绘画的魅力 🌈 在这个数字化飞速发展的时代,AI绘画已经不再是遥不可及的梦想。通过源码小程序,我们可以轻松探索AI绘画的奥秘,感受科技与艺术的完美结合。今天&#xff0…

ubuntu18.04 配置 mid360并测试fast_lio

1.在买到Mid360之后,我们可以看到mid360延伸出来了三组线。 第一组线是电源线,包含了红色线正极,和黑色线负极。一般可以用来接9-27v的电源,推荐接12v的电源转换器,或者接14.4v的电源转换器。 第二组线是信号线&#x…

组件之间的通信方式

【 0 】前言 Vue 是一个渐进式的 JavaScript 框架,通过组件化的方式构建应用。在 Vue 中,组件通信指的是不同组件之间传递数据、共享数据或调用方法等行为。在前端开发中,子组件和父组件之间的通信是非常常见和重要的。 【 1 】父子组件通信…

SMT智能车间MES系统的实施方案

SMT行业中MES系统实施的关键特征: SMT包括上下板设备,印刷设备,贴片设备,回流焊炉,AOI。AOI的全称是自动光学检查,它基于光学原理来检测焊接生产中遇到的常见缺陷。测试设备,测试设备等MES解决…

如何用多媒体沙盘实现智能交互体验?

随着多媒体技术在内容展示领域的迅猛进步,智能化信息交互方式已然跃升为公众瞩目的焦点,而展厅作为信息传递与产品展示的核心阵地,正面临着提升交互体验、强化信息传递效果的迫切需求。因此,以多媒体沙盘、LED屏幕等创新装置为媒介…

AIGC实践|用AI制作视频短片创作全流程

前言: 在深入探讨了AI在动态有声绘本和小游戏开发的应用之后,本次我们将聚焦于视频创作领域。本篇文章将详细展示如何使用AI工具从概念构思到画面生成再到最终成片的全过程,涵盖剧本创作、分镜头设计、视觉效果生成及音乐配制等各个阶段。让…

无人机的发展

朋友们,你们知道吗?无人机的发展之路可谓是科技界的一股清流,风头正劲啊!从最初简单的遥控飞机到现在各种智能功能的加持,无人机真是越来越神奇了! 首先,无人机在航拍领域大放异彩!无…

Redis 持久化的奥秘:主线程、子进程与后台线程的区别及潜在阻塞风险

1. 主线程、子进程和后台线程的联系与区别 Redis 是一个高性能的键值数据库,以其快速的响应速度和丰富的功能集,广泛应用于各种应用场景。理解 Redis 的线程和进程模型有助于更好地优化其性能。下面,我们将详细探讨 Redis 中的主线程、子进程和后台线程的联系与区别。 进程…

一文详解:信息化/数字化以及数智化的区别与联系

数字化转型是现代企业在竞争激烈的市场环境中保持竞争力的关键策略。数字化转型通常被分为三个阶段:信息化、数字化和数智化。 每个阶段都有其独特的特点和挑战,下面将详细阐述这三个阶段,并通过实际案例来说明其应用的区别和效果。 低成本起…

U盘无法格式化怎么办?

U盘是我们日常工作和生活中经常使用的便携数据存储设备,它可以轻松地存储和传输文件,是工作和学习的好帮手。然而,有时候我们会遇到U盘无法格式化的情况,很多人可能会对此问题感到手足无措。本期内容将为大家详细解析U盘无法格式化…

0601 模拟集成电路中的直流偏置技术

模拟集成电路中的直流偏置技术 6.1.1 BJT 电流源6.1.2 FET电流源6.1.3电流源做作有源负载![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/c5381fff64bd48a1b28ba9bee179b18f.png) 6.1.1 BJT 电流源 6.1.2 FET电流源 6.1.3电流源做作有源负载