分享
  1. 首页
  2. 文章

Go语言:REST Web服务调用

yushulx · · 4216 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

环境配置

  • IDE: JetBrain Gogland.
  • Go 1.7.4.
  • Windows 10.
  • 工作目录结构:
    <GOPATH>
     - src
     - bin
     - pkg
  • Go设置:
    GOROOT=E:\Go
    GOPATH=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 := <-channel
data := make(map[string]interface{})
data["image"] = base64data
data["barcodeFormat"] = 234882047
data["maxNumPerPage"] = 1

使用Package json编码:

jsonData, err := json.Marshal(data)

返回结果JSON解码:

result, _ := ioutil.ReadAll(resp.Body)
 
// decode JSON
const 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


有疑问加站长微信联系(非本文作者)

本文来自:开源中国博客

感谢作者:yushulx

查看原文:Go语言:REST Web服务调用

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
4216 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏