繁体   English   中英

Golang JSON / HTTP请求,例如curl

[英]Golang JSON/HTTP request like curl

我正在寻找有关如何使用Golang执行请求的快速教程,以模仿那些将与curl一起使用的请求。 我有两个要与之通信的API基本上都以相同的方式工作。 一个是ElasticSearch,另一个是Phillips Hue。 我知道这两个都在Go中都有库。 那不是我所追求的,我正在尝试学习如何做到这一点:

$ curl -XGET 'http://localhost:9200/twitter/tweet/_search' -d '{
"query" : {
    "term" : { "user" : "kimchy" }
} }'

与Golang。 我能找到的所有内容似乎都很难编码

http://url:port/api/_function?something=value?anotherthing=value...

但是我已经在软件中浮动了JSON对象。 有没有一种方法可以用JSON字符串或struct或类似的东西模拟CURL的-d功能?

正如评论者@JimB指出的那样,HTTP / 1.1规范不允许使用主体执行GET请求; 但是,也不需要服务器实际解析正文,因此,如果您遇到奇怪的行为,请不要感到惊讶。

就是说,这是使用golang HTTP客户端对主体执行GET请求的方式:

reader := strings.NewReader(`{"body":123}`)
request, err := http.NewRequest("GET", "http://localhost:3030/foo", reader)
// TODO: check err
client := &http.Client{}
resp, err := client.Do(request)
// TODO: check err

Web服务器将看到如下请求:

GET /foo HTTP/1.1
Host: localhost:3030
User-Agent: Go 1.1 package http
Content-Length: 12
Accept-Encoding: gzip

{"body":123}

要构建类似“ curl”的命令行工具,您将需要使用许多go包(例如,用于标志解析HTTP请求处理 ),但是大概可以从(优秀的)文档中找到所需的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM