http编程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、(每日治愈栏目)🚀🚀🚀

二、http请求协议☀️☀️☀️

http请求报文格式

在这里插入图片描述
在这里插入图片描述
一个http请求可以分为4部分:

1.请求行:包含三部分

1.格式 : 方法 + URL + 协议版本
2.实例 : POST + chapter17/user.html HTTP/1.1
3.请求方法:
(1) GET: 获取数据
(2) POST: 上传数据(表单格式,json格式)
(3) PUT: 修改数据
(4) DELETE: 用于删除数据

2.请求头

1.格式: key : value
2.可以有很多个键值对
3.常见重要头:
(1)Accept:接收数据的格式
(2)User-Agent:描述用户浏览器的信息
(3)Connection: Keep-Alive(长链接)Close(短链接)
(4)Accept_Encoding : 描述可以接受的编码
(5)Cookie: 由服务器设置的key=value数据,客户端下次请求的时候可以携带过来
(6)Content–Type:appliction/-form(表示上传的数据是表单格式)
4.空行
5.请求包体
(1)一般在POST方法时,会提供BODY
(2)在GET的时候也可以提供BODY,但是容易混淆,建议不要这样用

三、http响应协议☀️☀️☀️

1.http响应详解

在这里插入图片描述

http响应格式分为四部分:
1.第一部分 : 状态行
1.协议格式: 协议版本号 + 状态码 + 状态描述
2.实例: HTTP/1.1 + 200 +OK
3.常用的状态码:
1xx —》 客户端可以继续发送请求
2xx —> 正常访问
3xx —> 重定向
4xx
401 —> 未授权 not authorized
404 —> Not found
5xx
501 —> internal Error(服务器内部错误)

2.第二部分 : 响应头
1.Connect-Type : application/json
2.server: Apache
3.Data :…

3.第三部分 : 空行

==4.第四部分:==通常返回json数据

2.http响应代码演示

package main

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

func main() {
	client := http.Client{}
	resp, err := client.Get("https://www.baidu.com")
	if err != nil {
		fmt.Println("client.Get err:", err)
		return
	}
	body := resp.Body
	fmt.Println("body :", body)
	readBodyStr, err := ioutil.ReadAll(body)
	if err != nil {
		fmt.Println("read body err:", err)
		return
	}
	fmt.Println("body string:", string(readBodyStr))

	ct := resp.Header.Get("Content-Type")
	date := resp.Header.Get("Date")
	server := resp.Header.Get("Server")

	fmt.Println("Content-Type", ct)
	fmt.Println("data:", date)
	fmt.Println("server", server)

	url := resp.Request.URL
	code := resp.StatusCode
	status := resp.Status

	fmt.Println("url:", url)
	fmt.Println("code:", code)
	fmt.Println("status", status)

}

四、json编解码☀️☀️☀️

1.json编码

package main

import (
	"encoding/json"
	"fmt"
)

type Student struct {
	Id     int
	Name   string
	Age    int
	gender string //小写开头 在json编码时会忽略掉

}

func main() {
	//在网络中传输的时候,把student结构体,编码成json字符串,传输 ===> 结构体 ====》 字符串 ===》编码
	//接收字符串,需要将字符串转换成结构体 然后操作 ===》字符串 ===》 结构体 ===》 解密

	lily := Student{
		Id:     1,
		Name:   "Lily",
		Age:    20,
		gender: "女生",
	}

	encodeInfo, err := json.Marshal(&lily)
	if err != nil {
		fmt.Println("json.Marshal err:", err)
		return
	}
	fmt.Println("encodeInfo", string(encodeInfo))

	//反序列化
	var lily2 Student
	if err := json.Unmarshal([]byte(encodeInfo), &lily2); err != nil {
		fmt.Println("json.Unmarshal err:", err)
		return
	}

	fmt.Println("name:", lily2.Name)
	fmt.Println("age:", lily2.Age)
	fmt.Println("id:", lily2.Id)
}

2.结构体标签

package main

import (
	"encoding/json"
	"fmt"
)

type Teacher struct {
	Name    string `json:"-"`            //在使用json编码时,这个编码不参与
	Subject string `json:"Subject_name"` //在json编码时,这个字段会编码成Subject_name
	Age     int    `json:""age,string`   //age转换成string类型 一定要两个字段 名字+类型 中间不能有空格
	gender  string
	Address string `json:"address,omitepty"` //不存在时会忽略
}

func main() {
	t1 := Teacher{
		Name:    "AA",
		Subject: "Golang",
		Age:     18,
		gender:  "Man",
	}

	fmt.Println("t1:", t1)
	encodeInfo, _ := json.Marshal(&t1)

	fmt.Println("encodeInfo:", string(encodeInfo))
}

五、总结🍓🍓🍓

`

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值