首页 > 学院 > 开发设计 > 正文

Go语言:REST Web服务调用

2019-11-08 01:18:23
字体:
来源:转载
供稿:网友

Dynamsoft部署了基于REST的条形码服务。这里分享下如何使用Go语言发送包含BASE64图像数据的HTTP POST请求。

环境配置

IDE: JetBrain Gogland.Go 1.7.4.Windows 10.工作目录结构:<GOPATH> - src - bin - pkg

 

Go设置:GOROOT=E:/GoGOPATH=g:/gowork

 

基本步骤

1. 读取图像文件。

2. 把byte数组转换成base64字符串。

3. JSON编码。

4. 通过HTTP POST发送JSON数据。

5. 服务器识别条形码返回结果。

6. JSON解码获取结果。

文件读取与BASE64转换

使用Package ioutil读取文件:

import "io/ioutil"data, err := ioutil.ReadFile(filename)

Base64编码。因为I/O比较耗时,可以放到goroutine中去执行。通过channel返回结果:

import "encoding/base64"channel <- base64.StdEncoding.EncodeToString(data)

 

JSON编解码

先把数据存储在map中:

base64data := <-channeldata := make(map[string]interface{})data["image"] = base64datadata["barcodeFormat"] = 234882047data["maxNumPerPage"] = 1

使用Package json编码:

jsonData, err := json.Marshal(data)

返回结果JSON解码:

result, _ := ioutil.ReadAll(resp.Body) // decode JSONconst resultKey = "displayValue"dec := json.NewDecoder(bytes.NewReader(result))for { t, err := dec.Token() if err == io.EOF { break } if err != nil { log.Fatal(err) } tmp := fmt.SPRintf("%v", t) if tmp == resultKey { t, _ := dec.Token() tmp := fmt.Sprintf("%v", t) fmt.Println("Barcode result: ", tmp) break }}

HTTP POST请求

使用Package http发送HTTP POST请求:

import "net/http"url := "http://demo1.dynamsoft.com/dbr/webservice/BarcodeReaderService.svc/Read"resp, err := http.Post(url, "application/json", bytes.NewBuffer(jsonData))

测试

1. 获取依赖包:

go get github.com/dynamsoft-dbr/golang/web-service

2. 在Go工程中导入依赖:

import "github.com/dynamsoft-dbr/golang/web-service"

3. 创建main.go:

package main import ( "os" "fmt" "github.com/dynamsoft-dbr/golang/web-service") func main() { var filename string if len(os.Args) == 1 { fmt.Println("Please specify a file.") return } filename = os.Args[1] _, err := os.Stat(filename) if err != nil { fmt.Println(err) fmt.Println("Please specify a vailid file name.") return } channel := make(chan string) // read file to base64 go web_service.File2Base64(filename, channel) // read barcode with Dynamsoft web service web_service.ReadBarcode(channel) fmt.Println("Done.")}

4. 编译运行程序:

go install<GOPATH>/bin/main <barcode image file>

golang barcode result

源码

https://github.com/dynamsoft-dbr/golang


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表