我尝试使用Apiary并制作了一个通用模板来发送JSON到模拟服务器,并有以下代码:
package main
import (
"encoding/json"
"fmt"
"github.com/jmcvetta/napping"
"log"
"net/http"
)
func main() {
url := "http://restapi3.apiary.io/notes"
fmt.Println("URL:>", url)
s := napping.Session{}
h := &http.Header{}
h.Set("X-Custom-Header", "myvalue")
s.Header = h
var jsonStr = []byte(`
{
"title": "Buy cheese and bread for breakfast."
}`)
var data map[string]json.RawMessage
err := json.Unmarshal(jsonStr, &data)
if err != nil {
fmt.Println(err)
}
resp, err := s.Post(url, &data, nil, nil)
if err != nil {
log.Fatal(err)
}
fmt.Println("response Status:", resp.Status())
fmt.Println("response Headers:", resp.HttpResponse().Header)
fmt.Println("response Body:", resp.RawText())
}
这段代码没有正确发送JSON,但我不知道为什么。JSON字符串在每次调用中都可能不同。我不能使用Struct
。
9条答案
按热度按时间tvokkenx1#
我不熟悉napping,但是使用Golang的
net/http
包可以很好地工作(playground):gv8xihay2#
你可以使用
post
来发布你的json。jtw3ybtb3#
如果你已经有一个结构。
完整的gist。
vzgqcmou4#
除了标准的net/http包,你可以考虑使用我的GoRequest,它包裹了net/http,让你的生活更轻松,而不必过多考虑json或struct。但你也可以在一个请求中混合和匹配它们!(你可以在github页面中看到更多细节)
所以,最后你的代码将变成如下所示:
这取决于你想如何实现。我制作这个库是因为我和你有同样的问题,我想要代码更短,易于使用json,并且在我的代码库和生产系统中更易于维护。
uurv41yg5#
HTTP或HTTPS的POST请求示例
nnvyjq4y6#
如another answer中所述,对大型请求体使用io.Pipe。这种方法通过将数据从JSON编码器流式传输到网络,避免在内存中构建整个请求体。
这个答案建立在另一个答案的基础上,展示了如何处理错误。总是处理错误!
代码如下:
gg0vcinb7#
如果你有很多数据要发送,你可以使用管道:
https://golang.org/pkg/io#Pipe
djp7away8#
如果你想这样做,你需要使用这个Map来解组json字符串。
但是如果你每次都需要改变json,并且为了让你的requst body的初始化更方便,你可以使用这个map来创建json body。
然后将其封送到json-string。
zvokhttg9#
我会使用
net/http
包而不是napping
。这将创建一个新的POST请求,使用JSON数据作为请求体,设置必要的头,并使用
http.Client
发送请求。