json - 类似 curl 的 Golang JSON/HTTP 请求

标签 json http curl go

我正在寻找有关如何使用 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 字符串或结构或类似的东西模拟 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 包(例如 flag parsingHTTP request handling),但大概您可以从(优秀的)文档中找到您需要的东西。

关于json - 类似 curl 的 Golang JSON/HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29379156/

相关文章:

ios - 如何从 json 调用评级 View 并在我的 TableView 中显示评级

Android - HTTP GET 请求

php - cURL 'Content-length required' 错误...搜索了 3 天,没有运气

arrays - 如何将 json 数组转换为 flex 4 数组 (as3)?

ASP.NET IConfigurationSection 正在为 POCO 返回空对象

http - 无法使用 HTTP header 在 AWS S3 中设置对象元数据

C++ 向 Web 服务器发送数据

java - 将正文请求 POST 中的多个文件上传到 Spring Restful API

curl - vagrant up 不能在 Windows 上工作

javascript - 向 AWS API Gateway 发出的 Ajax 请求无法解析 json 响应