Go Web编程实战(9)----创建客户端

简介: Go Web编程实战(9)----创建客户端

创建一个客户端


Go语言的net/http包中,还提供了一个被称为Client的结构体。该结构体提供了Get()、Post()两个请求函数。下面,我们来分别使用代码实现这些请求。


Get()请求

首先,我们来看一下Get()请求函数的定义,以及其内部的调用逻辑:

func Get(url string) (resp *Response, err error) {
  return DefaultClient.Get(url)
}
func (c *Client) Get(url string) (resp *Response, err error) {
  req, err := NewRequest("GET", url, nil)
  if err != nil {
  return nil, err
  }
  return c.Do(req)
}


可以发现,其真实调用的函数其实是NewRequest(),其实Post请求也是一样,之需要将NewRequest()函数的第一个参数改为“POST”即可。


下面,我们来实现Get()请求:

package main
import (
  "fmt"
  "io/ioutil"
  "net/http"
)
func main() {
  resp, err := http.Get("https://blog.csdn.net/liyuanjinglyj")
  if err != nil {
  fmt.Println(err)
  }
  closer := resp.Body
  bytes, err := ioutil.ReadAll(closer)
  fmt.Println(string(bytes))
}


运行之后,控制台会打印我的CSDN主页的HTML文档内容。


Post()请求

Post()请求稍微比Get()请求复杂点,这里我们直接上代码:

package main
import (
  bytes2 "bytes"
  "fmt"
  "io/ioutil"
  "net/http"
)
func main() {
  url := "http://httpbin.org/post"
  body := "{\"name\",\"liyuanjing\",\"age\",29}"
  response, err := http.Post(url, "application/x-www-form-urlencoded", bytes2.NewBuffer([]byte(body)))
  if err != nil {
  fmt.Println(err)
  }
  bytes, err := ioutil.ReadAll(response.Body)
  fmt.Println(string(bytes))
}


运行之后,控制台会返回你传递的参数内容,这里就不展示了。


当然,还有PUT与DELETE请求。不过,在实际的应用中比较少,这里直接忽略。


请求头设置

在我们进行各种爬虫以及获取网页各种数据时,为了伪装自己是浏览器,常常需要设置各种类型的请求头。而Go语言给我们提供Header类型。


下面,我们来定义一个User-Agent请求头,因为我们是自己设置的Header,所以需要直接使用NewRequest()方法。

package main
import (
  "fmt"
  "io/ioutil"
  "net/http"
)
func main() {
  client := &http.Client{}
  request, err := http.NewRequest("Get", "https://www.baidu.com/", nil)
  request.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36")
  if err != nil {
  fmt.Println(err)
  }
  resp, _ := client.Do(request)
  closer := resp.Body
  bytes, err := ioutil.ReadAll(closer)
  fmt.Println(string(bytes))
  defer resp.Body.Close()
}
相关文章
|
3天前
|
Android开发
Android WindowFeature小探究,Android客户端Web页面通用性能优化实践
Android WindowFeature小探究,Android客户端Web页面通用性能优化实践
|
5天前
|
Java 应用服务中间件 测试技术
深入探索Spring Boot Web应用源码及实战应用
【5月更文挑战第11天】本文将详细解析Spring Boot Web应用的源码架构,并通过一个实际案例,展示如何构建一个基于Spring Boot的Web应用。本文旨在帮助读者更好地理解Spring Boot的内部工作机制,以及如何利用这些机制优化自己的Web应用开发。
31 3
|
1天前
|
缓存 监控 安全
Django框架在大型Web应用中的架构设计与实战
【5月更文挑战第18天】Django框架在构建大型Web应用中扮演重要角色,采用分层架构(数据、业务逻辑、表示层)和多应用组织模式,结合缓存策略(如Memcached、Redis)提升性能。通过异步处理、分布式部署提高响应速度和扩展性。关注数据分区、安全设计及监控日志,确保系统高效、稳定。Django为复杂业务提供坚实基础,助力打造卓越Web系统。
18 7
|
2天前
|
存储 前端开发 网络协议
所有的 Web 应用其实就是一个 socket 服务端, 而用户使用的浏览器就是一个 socket 客户端程序
所有的 Web 应用其实就是一个 socket 服务端, 而用户使用的浏览器就是一个 socket 客户端程序
6 0
|
2天前
|
JSON JavaScript 前端开发
web前端入门到实战:32道常见的js面试题,2024年最新秋招是直接面试吗
web前端入门到实战:32道常见的js面试题,2024年最新秋招是直接面试吗
|
2天前
|
JavaScript 前端开发 程序员
web前端入门到实战:32道常见的js面试题(1),面试哪些
web前端入门到实战:32道常见的js面试题(1),面试哪些
|
5天前
|
负载均衡 Go 调度
使用Go语言构建高性能的Web服务器:协程与Channel的深度解析
在追求高性能Web服务的今天,Go语言以其强大的并发性能和简洁的语法赢得了开发者的青睐。本文将深入探讨Go语言在构建高性能Web服务器方面的应用,特别是协程(goroutine)和通道(channel)这两个核心概念。我们将通过示例代码,展示如何利用协程处理并发请求,并通过通道实现协程间的通信和同步,从而构建出高效、稳定的Web服务器。
|
5天前
|
Go
怎么获取客户端真实IP?GO
怎么获取客户端真实IP?GO
10 2
|
5天前
|
存储 人工智能 测试技术
python自动化测试实战 —— CSDN的Web页面自动化测试
python自动化测试实战 —— CSDN的Web页面自动化测试
194 0
|
5天前
|
XML 前端开发 JavaScript
CSR(客户端渲染)和AJAX在Web开发中各自扮演不同的角色
【5月更文挑战第8天】CSR(客户端渲染)与AJAX在Web开发中各司其职。CSR提供初始HTML框架,通过JavaScript在浏览器端获取并渲染数据,提升交互性和响应速度。AJAX则实现页面局部更新,如实时搜索,不刷新页面即可获取数据。CSR可能因DOM操作多而引发性能问题,但可优化解决;AJAX适合频繁交互场景,提高响应性。两者在不同需求下各有优势,需按项目选择适用技术。
16 4