【发布时间】:2017-04-06 01:31:12
【问题描述】:
我对 Go 比较陌生,目前正在尝试在弹性搜索中搜索记录,下面是我创建的基本代码,到目前为止,我能够执行一个简单的 GET 请求“http://10.132.0.13:9200/”和结果按预期返回。但是,一旦我尝试运行稍微复杂一点的 GET 请求,它就会失败。
以下是我目前创建的代码。
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
//request, err := http.Get(`http://10.132.0.13:9200/`) // this just returns the test page
request, err := http.Get(`http://10.132.0.13:9200/database-*/_search?pretty -d { "query": { "match": {"_all": "searchterm"}}}`)
if err != nil {
//error
}
defer request.Body.Close()
body, err := ioutil.ReadAll(request.Body)
fmt.Println(string(body))
}
我可以直接使用 curl -xget 查询索引并返回预期结果
有没有办法在golang中实现类似的curl -xget?
【问题讨论】:
-
获取请求通常不会提交数据。 Post 和 Put 请求可以。 stackoverflow.com/questions/8498371/curl-get-and-x-get
-
尽管发送带有 GET 请求的正文并不常见,但它是完全有效的,并且没有理由不这样做。如果您只读取数据而不更改/添加数据,则 GET 是正确的选择,而 POST 将是错误的。 Elastic 使用 GET 进行查询,对于更复杂的查询,它使用 GET 请求正文中的数据。
-
如果您查看对 http.Get 的调用,它有一个参数,即 URL。在您的非工作示例中,您没有传递有效的 URL;您正在传递您将传递给 curl 的内容,这不是一回事。 URL 没有像
-d这样的标志。
标签: curl elasticsearch go get