当前位置 : 主页 > 网页制作 > HTTP/TCP >

http.Post数据二进制,在golang中等效的curl

来源:互联网 收集:自由互联 发布时间:2021-06-16
我正在尝试使用net / http将json文件发布到ElasticSearch.通常在Curl我会做以下事情: curl -XPOST localhost:9200/prod/aws -d @aws.json 在golang我用过一个例子,但它没有用.我可以看到它发布但必须设置错
我正在尝试使用net / http将json文件发布到ElasticSearch.通常在Curl我会做以下事情:

curl -XPOST localhost:9200/prod/aws -d @aws.json

在golang我用过一个例子,但它没有用.我可以看到它发布但必须设置错误的东西.我已经测试了我正在使用的JSON文件,这很好.

去代码:

target_url := "http://localhost:9200/prod/aws"
  body_buf := bytes.NewBufferString("")
  body_writer := multipart.NewWriter(body_buf)
  jsonfile := "aws.json"
  file_writer, err := body_writer.CreateFormFile("upfile", jsonfile)
  if err != nil {
    fmt.Println("error writing to buffer")
    return
  }
  fh, err := os.Open(jsonfile)
  if err != nil {
    fmt.Println("error opening file")
    return
  }
  io.Copy(file_writer, fh)
  body_writer.Close()
  http.Post(target_url, "application/json", body_buf)
如果你想从文件中读取json然后使用.

jsonStr,err := ioutil.ReadFile("filename.json")
if(err!=nil){
    panic(err)
}

Simple way to post json in http post request.

req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
    req.Header.Set("Content-Type", "application/json")

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    fmt.Println("response Status:", resp.Status)
    body, _ := ioutil.ReadAll(resp.Body)
    fmt.Println("response Body:", string(body))

这应该工作

网友评论