Go語言:REST Web服務調用

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.