day17 网络编程

news/2024/7/4 10:28:48/文章来源:https://www.cnblogs.com/dengz/p/18280840

go 开启一个 web 服务

  • net 包,所有有关网络的都在net包下
package mainimport ("fmt""net/http"
)// 需要传入 :ResponseWriter, *Request
func hello(rw http.ResponseWriter, request *http.Request) {fmt.Println("已经收到请求")fmt.Println("请求地址:", request.Host)fmt.Println("请求接口:", request.URL)fmt.Println("请求方法:", request.Method)// 响应rw.Write([]byte("hello go web!你好 go web"))
}
func main() {/* net 包 *//* 手动开启一个 http 的服务*/http.HandleFunc("/hello", hello)//http.ListenAndServe(":8080", nil)
}

普通Server/Client 通信

server
package mainimport ("fmt""net/http"
)func hello1(response http.ResponseWriter, req *http.Request) {// - 请求fmt.Println("【request URL】:", req.URL)fmt.Println("【request Header】:", req.Header)fmt.Println("【request Host】:", req.Host)fmt.Println("【request Method】:", req.Method)// - 响应response.Write([]byte("<H1 style='color:red'>colorcolorcolor</H1>"))
}
func main() {/*go 中的所有网络相关的。都在net包下,http也在net包下- 包含 服务端 和 客户端*/// http  处理请求的方法http.HandleFunc("/hello", hello1)// 地址,处理器。 默认最后一行http.ListenAndServe("localhost:8080", nil)}
client
package mainimport ("fmt""io""net/http"
)func main() {/* go 发送请求并获取响应 *///1.发送请求//response, _ := http.Get("http://localhost:8080/hello")response, _ := http.Get("http://www.baidu.com")//2.延时关闭 请求链接defer response.Body.Close()//3.循环 读取body里的数据data := make([]byte, 1024)for {n, err := response.Body.Read(data)fmt.Println(n, err)// 当 err 信息 :不等于nig 并且 不为 EOF 时表示还没读完if err != nil && err != io.EOF { // 没错误,继续读取,有错误另外处理fmt.Println(">>>>>>>读取时,产生其他错误:", err)return} else {fmt.Println("读取中!!!")fmt.Println(string(data[:n]))if n == 0 {fmt.Println("读取完毕!!!")break}}}}

带参数Server/Client 通信

server
package mainimport ("fmt""net/http"
)func login(w http.ResponseWriter, r *http.Request) {fmt.Println("【进入login】")// 1. 设置 模拟 db map数据dbUserInfo := map[string]string{"username": "admin", "password": "123456"}//2. 读取请求参数requestData := r.URL.Query()//3. 获取请求参数数据username := requestData.Get("username")password := requestData.Get("password")//4. 判断是否能够登陆if dbUserInfo["username"] == username && dbUserInfo["password"] == password {w.Write([]byte(`{"code":200,"data":{"username":"admin","password":"123456"}}`))} else {w.Write([]byte(`{"code":400,"data":{}}`))}}
func main() {/* 模拟登陆 */http.HandleFunc("/login", login)http.ListenAndServe("localhost:9999", nil)
}
client
package mainimport ("fmt""io/ioutil""net/http""net/url"
)func main() {//1. 设置 请求地址requestUrl := "http://localhost:9999/login"//2. 封装参数 通过 http url包requestData := url.Values{}requestData.Set("username", "admin")requestData.Set("password", "123456")//3. 拼接参数到 请求地址上urlUri, _ := url.ParseRequestURI(requestUrl)urlUri.RawQuery = requestData.Encode()// 4. 发送请求res, _ := http.Get(urlUri.String())// 5. 处理请求结果responseData, _ := ioutil.ReadAll(res.Body)fmt.Println(res.StatusCode)fmt.Println(res.Header)fmt.Println(res.ContentLength)fmt.Println("请求结果:", string(responseData))}

表单Server/Client 通信

server
package mainimport ("fmt""net/http"
)func register(writer http.ResponseWriter, request *http.Request) {// 1. 获取表单数据request.ParseForm()             // 解析页面表单requestData := request.PostForm // 获取表单数据username := requestData.Get("username")password := requestData.Get("password")fmt.Println(">>>requestData", requestData)fmt.Println(">>>username", username, ">>>password", password)writer.Write([]byte("注册成功!"))}func main() {/* form 表单数据 提交到后台。 即 post 请求携带数据 */// 1. 注册处理函数http.HandleFunc("/register", register)// 2. 开启监听服务http.ListenAndServe(":8080", nil)
}
client
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<H1>注册表单</H1>
<form action="http://127.0.0.1:8080/register" method="post"><p>账户:<input type="text" name="username" id="username"></p><p>密码:<input type="password" name="password" id="password"></p><button type="submit">提交</button>
</form></body>
</html>

go 返回 template 模板 不常用,比python的模板还难用!!!

Server
package mainimport ("fmt""html/template""net/http"
)type User struct {username stringage      intName     string
}func userFunc(w http.ResponseWriter, r *http.Request) {// 1. 组装 map嵌套结构体 数据userMap := make(map[int]User)userMap[0] = User{age: 18, username: "zhangsan", Name: "aaa"}userMap[1] = User{age: 22, username: "lisi", Name: "bbb"}// 2. 数据返回给模板templatePath := "userList.html"userListTemplate, err := template.ParseFiles(templatePath)if err != nil {fmt.Println("模板解析错误!!")return}templateData := make(map[string]map[int]User)templateData["data"] = userMapuserListTemplate.Execute(w, templateData)}
func main() {/* go 的template 使用 */// 1. 注册路由和函数http.HandleFunc("/user", userFunc)// 2. 开启监听服务http.ListenAndServe(":8080", nil)}
Client
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<!-- 不分离 给页面传输数据  -->
<p>{{.data}}</p>
{{range $k,$v:= .data}}
<p>ID:{{$k}}</p>
<br>
<p>userInfo:{{$v}}</p>
<br><p>判断</p>{{if eq $k 1}}<p>Name:{{.Name}}</p><br><!--小写的不可展示--><p>username:{{.username}}</p><br><p>V:{{$v}}</p>{{end}}
{{end}}
</body>
</html>

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 安装CA证书

android 安装CA证书 提取证书计算证书的hash值 C:\Users\czl\Downloads>"C:\Program Files\Git\usr\bin\openssl.exe" x509 -inform PEM -subject_hash_old -in charles.pem b682a732 -----BEGIN CERTIFICATE----- MIIFRjCCBC6gAwIBAgIGAY1GZhqIMA0GCSqGSIb3DQEB…

全网最适合入门的面向对象编程教程:07 类和对象的Python实现-类型注解-提高代码可读性的利器

本文对类型注解的定义、使用原因进行了基本介绍,同时对使用typing模块实现类型提示和类型检查进行了基本讲解,通过使用类型注解可以让开发者更清晰地了解函数和变量的预期类型。全网最适合入门的面向对象编程教程:07 类和对象的 Python 实现-类型注解-提高代码可读性的利器 …

训练记录(Jul.)

7/2 AT_abc217_f *提高+/省选- 设 \(f_{l, r}\) 为把 \([l, r]\) 消去的方案数。 P3607 [USACO17JAN] Subsequence Reversal P *省选/NOI- CF1922F *2500 状态很好想,之前是因为转移成环所以没补,结果发现也可以没环。 \(f_{l, r, x}\) 表示把 \([l, r]\) 推平成 \(x\) 的…

Ubuntu24.04下Docker安装与配置

安装docker 官方教程加上代理 sudo apt-get updatesudo apt-get install ca-certificates curlsudo install -m 0755 -d /etc/apt/keyringscurl指定代理 sudo curl -x http://127.0.0.1:7897 -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.…

idea中配置Maven

主要修改两个地方:如上图。 注意: 1、如果本地仓库地址不变化,只有一个原因,就是maven/conf/settings.xml配置文件编写错误!仔细检查即可! 2、一定保证User settings file对应之前修改的settings.xml的路径,若 不一致,选中Override复选框,手动选择配置文件

linux tinydrm vs fbtft 性能对比测试

linux tinydrm vs fbtft 性能对比测试 本文将通过若干组对照试验,然后根据实验得出的数据,计算在使用fbdev的情况下,tinydrm相较于fbtft的提升幅度。免责声明:本人时间、精力有限,实验中的测试数据量较小,所以不建议将本文中的数据用于比较严谨的场景。测试环境开发板 树…

七月二日 python完成简单围棋游戏

第二天 最近,数据结构的小学期,这两天主要是完成我自己的课题设计完成围棋游戏。 【题目43】围棋游戏 设计一个简易的围棋游戏。盘面有纵横各十九条等距离、垂直交叉的平行线,共构成361个交叉点(以下简称为"点")。棋子分黑白两色。对局双方各执一色棋子,黑先白…

【vscode】vscode通过端口访问本地html页面(Live Server)

在学习mapbox过程中,发现有的图片,如果直接浏览器路径打开html文件,图片不出来,报错,得用服务的形势来访问!!!相信坚持的力量,日复一日的习惯.

基于VLC可见光通信的室内光通信信道信噪比分析matlab仿真

1.算法运行效果图预览2.算法运行软件版本 matlab2022a3.部分核心程序Pr = POW_all.*H; % 接收功率(毫瓦) POW_r = Pr./1000; % 接收功率(瓦) Pr_dbm = 10.*log10(POW_r); % 接收功率(dBm)%信噪比(SNR Ib = 202e-6; % 背景光子通量 No = 2…

JAVA文件IO流

基本的目录、文件操作,常用的IO输入输出流类介绍和使用。一、目录及文件操作Java中File类(文件类)以抽象的方式代表文件名和目录路径名,File对象则代表了磁盘中实际存在的文件和目录。File类不仅仅提供灵活的构造方法,同时还可以用于文件和目录的创建、文件的查找和文件的删…

[JLU] 数据结构与算法上机题解思路分享-第三次上机

这是吉林等通知大学数据结构与算法上机题的题解思路,没有精妙的解法,只是一个记录罢前言 首先,请务必自己尽全力尝试实现题目,直接看成品代码,思维就被拘束了,也很容易被查重。 这里只是思路解析的博客,代码仓库在 JLU_Data_Structures_Record 希望你能在这里找到你想要…

Google 发布了最新的开源大模型 Gemma 2,本地快速部署和体验

Google 重磅发布了最新版大语言模型Gemma 2,其中 90亿 参数版本适合我们个人在笔记本本地部署,老牛同学通过本文和大家一起,通过2种方式快速部署和体验,当然这2种快速部署模型的方式,也同样适用于其他大模型……Gemma 2 是 Google 最新发布的开源大语言模型。它有两种规模…

ros - slam - microros - 两轮差速模型运动学 - 运动学逆解

上一节我们推导并在代码中实现了运动学正解,本节我们来学习下运动学逆解,实现给定线速度和角速度,计算出轮子达到怎样的转速才能达到这个速度。 一、逆解推导我们直接用正解结果进行求逆解即可。 二、编写代码继续在上一节中的代码Kinematics.cpp中完善即可。void Kinematic…

vscode 中code-runner插件 py配置

"code-runner.executorMap": {"javascript": "node","python": "$pythonPath $fullFileName",}本文来自博客园,作者:__username,转载请注明原文链接:https://www.cnblogs.com/code3/p/18280704

vscode code-runner配置

"code-runner.executorMap": {"javascript": "node","python": "$pythonPath $fullFileName",}本文来自博客园,作者:__username,转载请注明原文链接:https://www.cnblogs.com/code3/p/18280704

[IOT2050 question] Unable to listen on http://127.0.0.1:1880/ 端口被占用错误

1. 背景第一次连接node-red的时候,一直出现错误Unable to listen on http://127.0.0.1:1880/。如下:2. 原因分析估计是早前利用iot2050setup小工具把node-red设置为开机自动启动项了,导致1880端口一直被占用。3. 验证首先查看端口是否真的被占用,利用sudo netstat -ltup命令…

实战篇——SQL注入sqli-labs-master靶场实战二

实战篇——SQL注入sqli-labs-master靶场实战(2) SQL注入的高级利用 (1) 宽字节注入 有时后端会对用户输入的特殊字符进行转义处理,这时普通的注入方式就会失效。对于成对的单引号,可以通过十六进制编码的方式绕过转义;而对于单个的单引号,当数据库的编码格式为GBK时,就要用…

代码随想录算法训练营第四十五天 | 打家劫舍

198.打家劫舍 题目链接 文章讲解 视频讲解dp[j]: 表示投到第j家最多能偷dp[j]的钱 递推公式: dp[j] = max(dp[j-2] + nums[j], dp[j-1]) 初始化:dp[0] = nums[0], dp[1] = max(dp[0], dp[1]) 遍历顺序:从小到大 打印dp数组class Solution { public:int rob(vector<int>…

使用开源ntfy消息推送服务发布通知实现全平台接收通知

说明:ntfy源代码:https://github.com/binwiederhier/ntfy.git 官方未编译Windows版本,本人编译最新版本:(链接:https://pan.baidu.com/s/1pMsfqNb5FKHawTLUBTgjQA?pwd=f84u提取码:f84u) 服务部署系统:Windows Server 2019或其他Windows系统简介 ntfy是一个开源的消息…