Go语言:REST Web服务调用
来源:互联网 发布:手机wilf上网关闭数据 编辑:程序博客网 时间:2024/05/29 02:59
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>
源码
https://github.com/dynamsoft-dbr/golang
0 0
- Go语言:REST Web服务调用
- 通过 Jersey 客户端 API 调用 REST 风格的 Web 服务
- 在Android开发中调用Rest web服务
- 通过 Jersey 客户端 API 调用 REST 风格的 Web 服务
- 在Android开发中调用Rest web服务
- 如何调用带不可信SSL证书的REST Web服务?
- 通过Jersey客户端API调用REST风格的Web服务
- 在Android开发中调用Rest web服务
- 在Android开发中调用Rest web服务
- 通过 Jersey 客户端 API 调用 REST 风格的 Web 服务
- 通过 Jersey 客户端 API 调用 REST 风格的 Web 服务
- java调用rest风格web服务的两种方式
- 通过 Jersey 客户端 API 调用 REST 风格的 Web 服务
- java调用rest风格web服务的两种方式
- Jersey客户端API调用REST风格的Web服务
- 通过Jersey客户端API调用REST风格的Web服务
- REST Web 服务介绍
- REST风格Web服务
- sqlserver 事务复制的工作机制
- word使用技巧--一直补充中
- Tensorflow实现线性回归
- 基于物品的协同过滤算法itemCF原理及python代码实现
- [JavaScript]利用JS去做响应式布局
- Go语言:REST Web服务调用
- LeetCode 520. Detect Capital
- 【android jni调用注意事项】
- 英特尔--X86架构微处理器
- React Native的一些坑Android
- tomcat相关
- ARM开发板嵌入式linux系统与主机PC通过串口传输文件
- 记录openssl asn1编解码开发遇到的内存错误问题 SIGSEGV
- 软件架构师书籍