当前位置: 首页 > news >正文

汕头网站建设报价wordpress社交图标

汕头网站建设报价,wordpress社交图标,找国外人做网站,外贸平台有哪些排名✨✨ 欢迎大家来到景天科技苑✨✨ #x1f388;#x1f388; 养成好习惯#xff0c;先赞后看哦~#x1f388;#x1f388; #x1f3c6; 作者简介#xff1a;景天科技苑 #x1f3c6;《头衔》#xff1a;大厂架构师#xff0c;华为云开发者社区专家博主#xff0c;… ✨✨ 欢迎大家来到景天科技苑✨✨ 养成好习惯先赞后看哦~ 作者简介景天科技苑 《头衔》大厂架构师华为云开发者社区专家博主阿里云开发者社区专家博主CSDN全栈领域优质创作者掘金优秀博主51CTO博客专家等。 《博客》Python全栈Golang开发PyQt5和Tkinter桌面开发小程序开发人工智能js逆向App逆向网络系统安全数据分析Djangofastapiflask等框架云原生K8Slinuxshell脚本等实操经验网站搭建数据库等分享。 所属的专栏Go语言开发零基础到高阶实战 景天的主页景天科技苑 文章目录 Go语言http编程一、HTTP基础概念1. HTTP请求2. HTTP响应3. HTTP/1.1与HTTP/2 二、http编程实战1. HTTP服务器2. HTTP客户端3. 带参数的请求4. POST请求提交Form表单5. POST请求提交Json数据 三、错误处理 Go语言http编程 HTTPHyperText Transfer Protocol是互联网上应用最广泛的一种网络协议。无论是浏览网页、使用API进行数据传输还是实现微服务架构HTTP都扮演着至关重要的角色。Go语言又称Golang以其简洁、高效和强大的并发处理能力成为了HTTP编程的优选语言之一。 一、HTTP基础概念 在深入了解Go语言的HTTP编程之前我们需要先了解一些HTTP的基础知识。 1. HTTP请求 请求方法GET、POST、PUT、DELETE等 请求URL包括协议、主机名、端口号、路径和查询参数 请求头包含元数据如Content-Type、Authorization等 请求体对于POST、PUT等请求方法通常包含要发送的数据 2. HTTP响应 状态码如200 OK、404 Not Found、500 Internal Server Error等 响应头包含元数据如Content-Type、Location等 响应体包含返回的数据 3. HTTP/1.1与HTTP/2 HTTP/1.1是广泛使用的版本支持持久连接和缓存控制。 HTTP/2引入了多路复用、头部压缩和服务器推送等特性提高了性能。 二、http编程实战 1. HTTP服务器 Go语言内置的net/http包提供了简单的HTTP服务器实现。 开启监听程序的代码是放在main方法的最后一行的 以下是一个基本的HTTP服务器示例 // http_server.go package mainimport (fmtnet/http )// 定义发送接收数据函数 func helloHandler(w http.ResponseWriter, r *http.Request) {// 给浏览器响应数据// 一般会响应一些信息给客户端 文字、网页 resp.Write// 响应一段文字[]byte(hello,web)// 响应一段html代码 []byte(html代码) 网页// Write([]byte) (int, error)_, err : w.Write([]byte(h1感谢大家来到景天科技苑!/h1))if err ! nil {return}//查看请求fmt.Println(请求方法: , r.Method)fmt.Println(请求体: , r.Body)fmt.Println(请求头, r.Header)fmt.Println(请求路径:, r.URL)fmt.Println(客户端地址:, r.RemoteAddr) //包含ip和端口号 }func main() {// HandleFunc http请求的处理函数// http程序启动之后是不会停止的一直监听请求// 访问这个url就会触发 helloHandler 函数 Request ResponseWriter// func HandleFunc(pattern string, handler func(ResponseWriter, *Request))//第一个参数是请求路径第二个参数是一个函数http.HandleFunc(/, helloHandler)fmt.Println(Starting server at :8080)// func ListenAndServe(addr string, handler Handler) error// ListenAndServe监听TCP地址addr并且会使用handler参数调用Serve函数处理接收到的连接。handler参数一般会设为nil此时会使用DefaultServeMux。//如果用户自定义实现了Handler那么根据相应路径在map中查询到相对应的Handler然后再调用用户自定义的ServeHTTP处理请求。//如果用户没有自定义Handler只注册了对应处理函数(使用了http.HandleFunc)那么就会根据默认DefaultServeMux去map查询到这个函数类型Handler然后再调用ServeHTTP处理函数。// 开启监听程序的代码是放在main方法的最后一行的。if err : http.ListenAndServe(127.0.0.1:8080, nil); err ! nil {fmt.Println(Error starting server:, err)} }浏览器访问 2. HTTP客户端 除了HTTP服务器Go语言也提供了强大的HTTP客户端功能。以下是一个基本的HTTP客户端示例 package mainimport (fmtionet/http )// 手写客户端访问 func main() {/*http.Get()*/// 一个请求包含 请求方式 请求的url 接收响应结果// func Get(url string) (resp *Response, err error)resp, _ : http.Get(http://localhost:8080)// 通过defer关闭连接 resp.Body 响应的主体//通过Body来关闭defer resp.Body.Close()fmt.Println(resp.Body)fmt.Println(resp.Status) // 200 OKfmt.Println(resp.Header) // 响应头// 接收具体的响应内容从Body里面获取//Body是IO流// The response body is streamed on demand as the Body field is read.// Body io.ReadCloser//循环从Body流中读取buf : make([]byte, 1024)for {n, err : resp.Body.Read(buf)if err ! nil err ! io.EOF {fmt.Println(读取出现了错误)return} else {fmt.Println(读取完毕)res : string(buf[:n])fmt.Println(服务器响应的数据为, res)break}}}3. 带参数的请求 客户端编写 url的参数拼接 拼接 连接 package mainimport (fmtionet/httpnet/url )func main() {// 复杂请求urlStr : http://127.0.0.1:8080/login // ?// 参数如何拼接到url上参数封装为数据url.Values{}data : url.Values{}//通过url.Values.Set()方法将参数拼接到url上data.Set(username, admin) // ?data.Set(password, 123456) // ?// 将url字符串转化为url对象并给携带数据// func ParseRequestURI(rawURL string) (*URL, error)urlNew, _ : url.ParseRequestURI(urlStr)urlNew.RawQuery data.Encode()// http://127.0.0.1:8080/login?password123456usernameadmin// ? get的传参多个参数之间使用 连接fmt.Println(urlNew)//查看类型fmt.Printf(%T \n, urlNew)// 发请求,参数是一个字符串地址resp, _ : http.Get(urlNew.String())defer resp.Body.Close()// 读取resp响应信息一次性读完返回buf// func ReadAll(r Reader) ([]byte, error)buf, _ : io.ReadAll(resp.Body)fmt.Println(string(buf)) }服务端 // http_server.go package mainimport (fmtnet/http )// 定义发送接收数据函数 func login(resp http.ResponseWriter, req *http.Request) {// 模拟数据库中存在一个数据mysqlUserData : adminmysqlPwdData : 123456fmt.Println(接收到了login请求)// 拿到请求中的查询参数urlData : req.URL.Query()username : urlData.Get(username)password : urlData.Get(password)// 登录逻辑, 将客户端发送的数据和系统数据比对实现登录业务if username mysqlUserData {if password mysqlPwdData {resp.Write([]byte(登录成功))} else {resp.Write([]byte(密码错误))}} else {resp.Write([]byte(登录失败))}}func main() {// HandleFunc http请求的处理函数// http程序启动之后是不会停止的一直监听请求// 访问这个url就会触发 helloHandler 函数 Request ResponseWriter// func HandleFunc(pattern string, handler func(ResponseWriter, *Request))//第一个参数是请求路径第二个参数是一个函数http.HandleFunc(/login, login)fmt.Println(Starting server at :8080)// func ListenAndServe(addr string, handler Handler) error// ListenAndServe监听TCP地址addr并且会使用handler参数调用Serve函数处理接收到的连接。handler参数一般会设为nil此时会使用DefaultServeMux。//如果用户自定义实现了Handler那么根据相应路径在map中查询到相对应的Handler然后再调用用户自定义的ServeHTTP处理请求。//如果用户没有自定义Handler只注册了对应处理函数(使用了http.HandleFunc)那么就会根据默认DefaultServeMux去map查询到这个函数类型Handler然后再调用ServeHTTP处理函数。// 开启监听程序的代码是放在main方法的最后一行的。if err : http.ListenAndServe(127.0.0.1:8080, nil); err ! nil {fmt.Println(Error starting server:, err)} }登录成功 4. POST请求提交Form表单 客户端 package mainimport (fmtionet/httpnet/url )func main() {// 目标URLurlStr : http://127.0.0.1:8080/register// 构建表单数据formData : url.Values{}formData.Set(username, admin)formData.Set(password, 123456)// 发送POST请求// func PostForm(url string, data url.Values) (resp *Response, err error)resp, err : http.PostForm(urlStr, formData)if err ! nil {fmt.Println(Error sending POST request:, err)return}defer resp.Body.Close()// 读取响应体body, err : io.ReadAll(resp.Body)if err ! nil {fmt.Println(Error reading response body:, err)return}// 打印响应状态码和响应体fmt.Println(Response Status:, resp.Status)fmt.Println(Response Body:, string(body)) }在这个例子中我们首先定义了目标URL和表单数据。然后我们使用 url.Values 类型的 formData 来存储表单键值对并通过 formData.Set 方法添加数据。最后我们调用 http.PostForm 函数发送请求并处理响应。 请注意http.PostForm 简化了表单数据的发送过程但如果你需要发送非表单数据如JSON你应该使用 http.NewRequest 和 http.Client.Do 方法来构建和发送自定义请求。 此外http.PostForm 发送的请求体是 application/x-www-form-urlencoded 格式的这通常用于HTML表单提交但不适用于所有类型的API请求。 服务端 // http_server.go package mainimport (fmtnet/http )// 定义发送接收数据函数 func register(resp http.ResponseWriter, req *http.Request) {fmt.Println(接收到了注册请求)// 解析表单// 处理表单的请求, 前端提交表单-后盾解析表单// func (r *Request) ParseForm() errorerr : req.ParseForm()if err ! nil {return}// 获取表单参数 postusername : req.PostForm.Get(username)password : req.PostForm.Get(password)fmt.Println(username, password)// 很多的判断// 短信// 验证码// 存到数据库resp.Write([]byte(注册成功)) }func main() {// HandleFunc http请求的处理函数// http程序启动之后是不会停止的一直监听请求// 访问这个url就会触发 helloHandler 函数 Request ResponseWriter// func HandleFunc(pattern string, handler func(ResponseWriter, *Request))//第一个参数是请求路径第二个参数是一个函数http.HandleFunc(/register, register)fmt.Println(Starting server at :8080)// func ListenAndServe(addr string, handler Handler) error// ListenAndServe监听TCP地址addr并且会使用handler参数调用Serve函数处理接收到的连接。handler参数一般会设为nil此时会使用DefaultServeMux。//如果用户自定义实现了Handler那么根据相应路径在map中查询到相对应的Handler然后再调用用户自定义的ServeHTTP处理请求。//如果用户没有自定义Handler只注册了对应处理函数(使用了http.HandleFunc)那么就会根据默认DefaultServeMux去map查询到这个函数类型Handler然后再调用ServeHTTP处理函数。// 开启监听程序的代码是放在main方法的最后一行的。if err : http.ListenAndServe(127.0.0.1:8080, nil); err ! nil {fmt.Println(Error starting server:, err)} }客户端运行 服务端运行 http.NewRequest 和 http.Client.Do 发送表单请求 客户端 package mainimport (fmtionet/httpnet/urlstrings )func main() {// 构建HTTP客户端client : http.Client{}// 定义POST URLmyurl : http://127.0.0.1:8080/register// 定义HTTP负载data : url.Values{}data.Set(username, John Doe)data.Set(password, 123456)// 将url.Values编码为表单格式的字符串并创建一个Readerpayload : strings.NewReader(data.Encode())// 发送POST请求// func NewRequest(method, url string, body io.Reader) (*Request, error)req, err : http.NewRequest(POST, myurl, payload)if err ! nil {fmt.Println(Error creating request:, err)return}// 设置HTTP消息头req.Header.Set(Content-Type, application/x-www-form-urlencoded)// 执行HTTP请求// func (c *Client) Do(req *Request) (*Response, error)resp, err : client.Do(req)if err ! nil {fmt.Println(Error sending request:, err)return}defer resp.Body.Close()// 读取响应状态码fmt.Println(Response Status:, resp.Status)// 读取响应体body, err : io.ReadAll(resp.Body)if err ! nil {fmt.Println(Error reading response body:, err)return}// 打印响应体fmt.Println(Response Body:, string(body)) }5. POST请求提交Json数据 有时我们需要发送JSON格式的POST请求。为此我们可以使用encoding/json包将数据结构转换为JSON字符串然后将其作为请求体发送。 客户端 package mainimport (bytesencoding/jsonfmtionet/http )type LoginRequest struct {Username string json:usernamePassword string json:password }func main() {// 创建一个http.Client对象client : http.Client{}// 构建一个LoginRequest对象data : LoginRequest{Username: zhangsan,Password: password,}// 将LoginRequest对象转换为JSON字符串jsonData, err : json.Marshal(data)if err ! nil {fmt.Println(JSON编码失败:, err)return}// 创建一个请求对象req, err : http.NewRequest(POST, http://127.0.0.1:8080/post, bytes.NewBuffer(jsonData))if err ! nil {fmt.Println(创建请求失败:, err)return}// 设置请求头的内容类型为application/jsonreq.Header.Set(Content-Type, application/json)// 发送请求并获取响应resp, err : client.Do(req)if err ! nil {fmt.Println(请求发送失败:, err)return}defer resp.Body.Close()// 读取并处理服务器返回的响应body, err : io.ReadAll(resp.Body)if err ! nil {fmt.Println(读取响应失败:, err)return}fmt.Println(响应状态码:, resp.StatusCode)fmt.Println(响应内容:, string(body)) }服务端 // http_server.go package mainimport (encoding/jsonfmtionet/http )type Result struct {Username string json:usernamePassword string json:password }// 定义发送接收数据函数 func postHandler(resp http.ResponseWriter, req *http.Request) {// 确保处理的是POST请求if req.Method ! POST {http.Error(resp, Invalid request method, http.StatusMethodNotAllowed)return}// 读取请求体中的数据body, err : io.ReadAll(req.Body)if err ! nil {http.Error(resp, Error reading request body, http.StatusInternalServerError)return}defer req.Body.Close()// 打印请求体中的数据fmt.Printf(Received POST request with body: %s\n, string(body))//将json字符串反序列化为原生结构体var result Resultif err : json.Unmarshal(body, result); err ! nil {http.Error(resp, Error parsing request body, http.StatusInternalServerError)}fmt.Println(客户端发来的数据:, result)fmt.Printf(客户端发来的数据:%v\n, result)fmt.Printf(数据类型%T\n, result)// 发送响应给客户端// Received your POST request. This is the response!resp.Write([]byte(服务端接收到数据)) }func main() {// HandleFunc http请求的处理函数// http程序启动之后是不会停止的一直监听请求// 访问这个url就会触发 helloHandler 函数 Request ResponseWriter// func HandleFunc(pattern string, handler func(ResponseWriter, *Request))//第一个参数是请求路径第二个参数是一个函数http.HandleFunc(/post, postHandler)fmt.Println(Starting server at :8080)// func ListenAndServe(addr string, handler Handler) error// ListenAndServe监听TCP地址addr并且会使用handler参数调用Serve函数处理接收到的连接。handler参数一般会设为nil此时会使用DefaultServeMux。//如果用户自定义实现了Handler那么根据相应路径在map中查询到相对应的Handler然后再调用用户自定义的ServeHTTP处理请求。//如果用户没有自定义Handler只注册了对应处理函数(使用了http.HandleFunc)那么就会根据默认DefaultServeMux去map查询到这个函数类型Handler然后再调用ServeHTTP处理函数。// 开启监听程序的代码是放在main方法的最后一行的。if err : http.ListenAndServe(127.0.0.1:8080, nil); err ! nil {fmt.Println(Error starting server:, err)} }运行服务端客户端请求成功服务端拿到json数据。 三、错误处理 在HTTP编程中错误处理是非常重要的。我们需要优雅地处理各种可能的错误如网络错误、解析错误、数据库错误等。 下面是一个简单的错误处理示例。 package mainimport (encoding/jsonfmtlognet/http )type ErrorResponse struct {Error string json:error }func helloHandler(w http.ResponseWriter, r *http.Request) {// 模拟一个错误err : fmt.Errorf(something went wrong)if err ! nil {handleError(w, err)return}fmt.Fprintf(w, Hello, World!) }func handleError(w http.ResponseWriter, err error) {log.Println(Error:, err)w.Header().Set(Content-Type, application/json)w.WriteHeader(http.StatusInternalServerError)json.NewEncoder(w).Encode(ErrorResponse{Error: err.Error()}) }func main() {http.HandleFunc(/, helloHandler)fmt.Println(Starting server at :8080)if err : http.ListenAndServe(:8080, nil); err ! nil {fmt.Println(Error starting server:, err)} }在这个示例中我们定义了一个ErrorResponse结构体用于表示错误响应。然后在helloHandler中我们模拟了一个错误并调用handleError函数来处理该错误。handleError函数记录了错误日志设置了响应头和内容类型并返回了一个JSON格式的错误响应。
http://www.dnsts.com.cn/news/166288.html

相关文章:

  • 网站需要服务器佛山网站设计定制
  • 甘肃住房与城乡建设厅网站游戏币网站建设成本
  • 网站主服务器域名网站建设费用IP
  • 网监备案网站网站开发服务费属于哪种进项
  • 网站开发实习总结什么语言做网站简单
  • 网站备案电话号码如何制作购物网页
  • 北京建站模板企业什么是网络营销策略?
  • 深圳市工程建设网站天津市建设厅注册中心网站
  • 织梦做的网站 xampp毕业设计做课程网站好
  • 网站布局设计步骤做中小型网站最好的架构
  • 满山红厦门网站建设网架公司名字大全
  • 在那些网站做宣传更好中建设计集团网站
  • seo网站优化建议做算命网站挣钱么
  • sjz住房建设局网站站长统计app网站
  • 上海工程项目查询抚顺网站seo
  • 公司做网站哪里好企业门户网站的建设方法
  • 宝塔搭建wordpress网站深圳龙岗是中风险还是低
  • 专业做网站登录查询网站有没有备案
  • 网站建设都有哪些方面网站图片怎么优化
  • 宁波专业做网站的公司哪家好广州建站工作室
  • 电子商务网站面临的安全隐患腾讯云可视化wordpress
  • 做3d同人的网站是什么建展机械有限公司
  • asp网站连接数据库论文中引用网站怎么写
  • 自主网站制作厦门做网站的公司
  • 广州 Wix网站开发上海市装修公司
  • 上海网站开发报价免费ppt模板网站下载
  • 比较有名的个人网站网站根 html
  • 公司支付的网站建设如何入账计算机软件开发培训班
  • 平潭建设局网站首页学生网页制作教程
  • 建站平台哪个最好聚诚网站建设