Go语言resty http包调用jenkins api实例

目录
  • 前言
  • Resty特色
  • 演示例子
    • 简单get请求
    • 增强get请求
    • 灵活post请求
    • 多文件上传
    • 文件下载
  • 实战例子
    • 构造一个jenkins客户端
    • 获取jenkins job信息
    • 无参构建job
    • 查看构建日志
    • job开关(启用禁用job)
  • 小结

前言

在前两篇文章中都使用HttpRequest这个http包来做api的请求

然后github上面还有一个更有名,星星更多,社区也更活跃的http包Resty

最近11月3号又发布了一个新版本,项目参与者多达75个,标星有5.2k

Resty特色

  • 支持GET, POST, PUT, DELETE, HEAD, PATCH, OPTIONS等方法
  • 设置和请求的方法简单
  • 请求体支持多种数据类型(string,[]byte,struct,map,slice,io.Reader)
  • 返回支持[]byte和string
  • 对json和xml内容自动编码和解码
  • 支持上传一个多个文件和下载指定路径或打包
  • 请求参数支持QueryParams,QueryString,FormData
  • 支持重试,代理,证书
  • 支持简单认证和认证token

Resty官网: https://github.com/go-resty/resty

演示例子

演示部分例子get,post等例子,其它put,delete,patch都差不多

简单get请求

该示例显示请求状态和响应耗时

func simpleGet() {
   client := resty.New()
   resp, _ := client.R().EnableTrace().Get("https://httpbin.org/get")
   fmt.Println("状态码:", resp.StatusCode())
   fmt.Println("总耗时:", resp.Time())
}

增强get请求

该示例支持map类型和路径参数,支持设置请求头和认证token

func enhancedGet() {
   client := resty.New()
   resp, _ := client.R().
      SetQueryParams(map[string]string{
         "page_no": "1",
         "limit":   "20",
         "sort":    "name",
         "order":   "asc",
         "random":  strconv.FormatInt(time.Now().Unix(), 10),
      }).
      //SetQueryString("productId=232&template=fresh-sample&cat=resty&source=google&kw=buy a lot more").
      SetHeader("Accept", "application/json").
      SetAuthToken("xxxxxxxxxxxxxxxxxxxxxxx").
      Get("/search_result")
   fmt.Println(resp)
}

灵活post请求

该示例支持设置body内容为map支持简单认证和token认证

func variousPost() {
   client := resty.New()
   resp, err := client.R().
      SetBody(map[string]interface{}{"username": "testuser", "password": "testpass"}).
      SetAuthToken("<your-auth-token>").
      Post("https://myapp.com/login")
   fmt.Println(resp, err)
}

多文件上传

该示例支持多文件上传,支持定义本地文件路径,支持设置FormData数据

func multipartFileUpload() {
   profileImgBytes, _ := ioutil.ReadFile("/Users/jeeva/test-img.png")
   notesBytes, _ := ioutil.ReadFile("/Users/jeeva/text-file.txt")
   client := resty.New()
   resp, _ := client.R().
      SetFileReader("profile_img", "test-img.png", bytes.NewReader(profileImgBytes)).
      SetFileReader("notes", "text-file.txt", bytes.NewReader(notesBytes)).
      SetFormData(map[string]string{
         "first_name": "dddd",
         "last_name": "cccc",
      }).
      Post("http://myapp.com/upload")
   fmt.Println(resp)
}

文件下载

定义下载保存路径,直接下载

func downFile() {
   client := resty.New()
   _, _ = client.R().
      SetOutput("plugin/test-v5.1-beta.zip").
      Get("http://my.app/test")
}

实战例子

通过上面的演示例子,可以看到resty这个包功能非常强大

接下来我们使用该包来封装jenkins api,来进行二次开发

构造一个jenkins客户端

编写一个方法创建jenkins客户端,后续所有动作只需调用既可

该客户端集成了重试,json头,以及简单认证

func jenkinsClient() *resty.Request {
   c := resty.New()
   a := c.SetRetryCount(3).SetRetryWaitTime(5 * time.Second).
      SetRetryMaxWaitTime(20 * time.Second).
      R().SetHeader("Accept", "application/json").
      SetBasicAuth("username", "password")
   return a
}
var (
   url = "http://ip:port"
)

获取jenkins job信息

创建好jobinfo的结构体,方便接下来的数据接收

type JobInfo struct {
   DisplayName string
   FullName string
   Buildable bool
   NextBuildNumber int
   InQueue bool
   Color string //blue成功 red失败
   Url string
}

resty会将返回数据解码,只需要提供结构体接收

func jenkinsJobInfo(job string) {
   a := jenkinsClient()
   jobInfo := &JobInfo{}
   resp, err := a.SetResult(jobInfo).Get(url + "/job/" + job + "/api/json")
   if err != nil {
      fmt.Println(err)
   }
   fmt.Println("resp\n", resp.StatusCode(), resp.Time())
   fmt.Println(jobInfo.Color)
}

无参构建job

简单post请求,调用无参数构建

func jenkinsJobBuild(job string)  {
   a := jenkinsClient()
   resp, _  := a.Post(url+"/job/"+job+"/build")
   if resp.StatusCode() == 201 {
      fmt.Println("build 成功")
   }
}

查看构建日志

查看日志,需要先获取job的最后一次的buildID

所以这里发请2次请求,第1次获取buildID,第2次获取日志内容

func jenkinsJobLog(job string)  {
   a := jenkinsClient()
   resp, _ := a.Get(url + "/job/" + job + "/lastBuild/buildNumber")
   if resp.StatusCode() == 200 {
      lastBuild := resp.String()
      resp2, _ := a.Get(url + "/job/" + job + "/" + lastBuild + "/logText/progressiveText")
      fmt.Println(resp2.String())
   }
}

job开关(启用禁用job)

第一个参数为job名称,第二个参数设定开关值

func jenkinsJobSwich(job string,swi bool) {
   a := jenkinsClient()
   if swi {
      resp, _ := a.Post(url + "/job/" + job + "/enable")
      fmt.Println(resp.Status())
   } else {
      resp, _ := a.Post(url + "/job/" + job + "/disable")
      fmt.Println(resp.Status())
   }
}

小结

通过实战可以发现,在没有第三方sdk的时候,完全是可以自已通过使用http包,来进行http api项目的二次开发或封装

而resty则是Go http包中的王者

以上就是Go语言resty http包调用jenkins api实例的详细内容,更多关于Go resty http包调用jenkins api的资料请关注我们其它相关文章!

(0)

相关推荐

  • golang构建HTTP服务的实现步骤

    目录 HTTP Handler ServeMux Server 创建HTTP服务 http注册路由 开启监听 处理请求 参考:    一个go最简单的Http服务器程序 package main import ( "fmt" "net/http" ) func IndexHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "hello world") } func m

  • 使用Go HTTP客户端打造高性能服务

    目录 问题一:默认的 HTTP Client 问题二:默认的 Http Transport 总结 HTTP(超文本传输协议)是一种用于客户端和服务器之间传输数据的通信协议.如果想要访问服务器资源,HTTP 请求是必不可少的.Go 语言里,net/http 包附带了默认配置,我们可以适当调整便可以获得高性能. 大多数语言都有提供各自的 HTTP 客户端,文章接下来部分我们将动手实践如何使用 Go 语言发起 HTTP 请求,并讨论其中有可能遇到的问题. 在做 Go 项目时,我就意识到 HTTP 客户

  • 详解Golang语言HTTP客户端实践

    目录 HTTP客户端封装 测试脚本 测试服务 最近在学习Golang语言,中间遇到一个前辈指点,有一个学习原则:Learning By Doing.跟我之前学习Java的经验高度契合.在前一段时间学习洼坑中挣扎了好几天,差点就忘记这个重要的成功经验. 那么那什么来做练习呢?当然结合当下的工作啦,所以我列了一个路线给自己,那就是从接口测试开始学起来,从功能测试到性能测试,然后掌握基本Server开发技能. 首先,得先把HTTP接口测试常用的几个功能实现了,主要是获取HTTPrequest对象,发送

  • jenkins构建go及java项目的方法

    写在前面 jenkins作为java的好基友,经历过单体项目时代->集群项目时代->容器集群分布式时代,使用稳定可靠,cpu友好(就泪存有点儿难看),如果有问题就... (当然这种情况不多(_) ) , 至于后期又有了jenkins x(容器版),对于非容器环境这里这里就不介绍啦 然后简略介绍我自己的项目情况吧,说说我的思路:首先我的项目有一个后台mee(java).mee-api(多个,为Java项目)以及gee-api项目(多个,go项目),后台项目暂不集群分布(目前够用), mee-ap

  • Go语言resty http包调用jenkins api实例

    目录 前言 Resty特色 演示例子 简单get请求 增强get请求 灵活post请求 多文件上传 文件下载 实战例子 构造一个jenkins客户端 获取jenkins job信息 无参构建job 查看构建日志 job开关(启用禁用job) 小结 前言 在前两篇文章中都使用HttpRequest这个http包来做api的请求 然后github上面还有一个更有名,星星更多,社区也更活跃的http包Resty 最近11月3号又发布了一个新版本,项目参与者多达75个,标星有5.2k Resty特色 支

  • C#调用新浪微博API实例代码

    C#调用新浪微博API WebRequest wq = WebRequest.Create(this.address); HttpWebRequest hq = wq as HttpWebRequest; string username = "keguangqiang@163.com"; string password = "3216731ks"; string appkey = "5786724301"; System.Net.Credenti

  • 易语言调用百度API获取IP归属地的代码

    常量据表 .版本 2 .常量 查ip地址, "<文本长度: 17>", , {"code":0,"data": 调用百度api获取ip归属地的代码 此功能需要加载精易模块5.6 .版本 2 .程序集 窗口程序集_启动窗口 .子程序 取IP归属地_百度API, 文本型, 公开 .参数 IP地址, 文本型 .局部变量 Json, 类_json .局部变量 返回数据, 文本型 .局部变量 地区, 文本型 CoInitialize (0) 返

  • android monkey自动化测试改为java调用monkeyrunner Api

    众所周知,一般情况下我们使用android中的monkeyrunner进行自动化测试时,使用的是python语言来写测试脚本.不过,最近发现可以用java调用monkeyrunner Api,用java语言写测试脚本. 于是,就简单研究了一下.这里做一些总结.希望有对在研究的午饭可以有所用处. 开始时,搜素到一些零碎的教程,说使用java调用monkeyrunner时,需要导入android sdk  tools路径下的lib里面的4个包:ddmlib.jar,guavalib.jar,monk

  • go语言区块链学习调用以太坊

    目录 1. geth 简介 1.1 下载地址: 1.2 安装: 1.3 查看是否安装成功 2. geth命令介绍 3. geth常用命令 3.1 指定数据目录 --datadir 3.2 账户相关 3.3 控制台console: 3.4 删除数据: 3.5 help 3.6 常见错误 4. Go语言调用合约 4.1 启动rpc端口 4.2 Go调用以太坊 4.3 调用接口 eth接口 personal接口 db接口 geth 以太坊智能合约开发中最常用的命令行工具. Geth是由以太坊基金会提供

  • Kotlin 语言中调用 JavaScript 方法实例详解

    Kotlin 语言中调用 JavaScript 方法实例详解 Kotlin 已被设计为能够与 Java 平台轻松互操作.它将 Java 类视为 Kotlin 类,并且 Java 也将 Kotlin 类视为 Java 类.但是,JavaScript 是一种动态类型语言,这意味着它不会在编译期检查类型.你可以通过动态类型在 Kotlin 中自由地与 JavaScript 交流,但是如果你想要 Kotlin 类型系统的全部威力 ,你可以为 JavaScript 库创建 Kotlin 头文件. 内联 J

  • go语言的sql包原理与用法分析

    本文实例讲述了go语言的sql包原理与用法.分享给大家供大家参考,具体如下: go的sql包是在pkg/database中,里面的两个包sql和sql/driver可以一起看.建议看这个两个包之前可以先看看sql文件夹下的doc.txt.这个文档说了几点比较重要的: 1 这两个包是真正Go风格的包. 2 这使用这两个包就不需要关于并发处理了,也不需要维护自己的数据库连接池了,一旦建立了一个连接,这个连接是可以在各个goroutine之间共用的. 3 sql/driver提供的是数据库的接口,具体

  • VBS调用Windows API函数的代码

    那天无意中搜索到一篇<WinCC VBS利用EXCEL调用Windows API函数>的文章,不知道WinCC是什么,Google了一下好像跟西门子自动化有关.WinCC是什么并不重要,重要的是这篇文章提供了VBS调用Windows API的一种思路--EXCEL VBA,一种传说比VB还要VB的语言. 但是那篇文章中的例子都是使用已经写好的EXCEL VBA程序,即首先得存在一个EXCEL文件.我就想,能不能在VBS中通过excel.application对象创建一个包含VBA代码的EXCE

  • Python 调用 Windows API COM 新法

    Python中调用Win32API 通常都是使用 PyWin32或者ctypes.但要么依赖文件较多,要么用法繁琐. 这里介绍在Python中调用Win32 API 或者COM组件的另一个更好的,功能也更强大的解决方案. 首先需要确保安装的是 32位的Python(2.x 或者 3.x 均可). 下载通用库:win32exts for Python: https://github.com/tankaishuai/win32exts_for_Python 将win32exts.pyd 放入 Pyt

  • PHP调用接口API封装的例子

    GET: /** * 通过URL获取页面信息 * @param $url 地址 * @return mixed 返回页面信息 */ function get_url($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); //设置访问的url地址 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); c

随机推荐