【发布时间】:2021-12-16 05:10:39
【问题描述】:
我能够让 HTTP GET 请求像这样工作:
resp, err := http.Get("https://services.nvd.nist.gov/rest/json/cves/1.0/?modStartDate=2021-10-29T12%3A00%3A00%3A000%20UTC-00%3A00&modEndDate=2021-10-30T00%3A00%3A00%3A000%20UTC-00%3A00&resultsPerPage=5000")
我想有一种更简单的方法来构造查询参数,所以我创建了这个:
req, err := http.NewRequest("GET", "https://services.nvd.nist.gov/rest/json/cves/1.0/", nil)
if err != nil {
fmt.Printf("Error: %v\n", err)
os.Exit(1)
}
q := req.URL.Query()
q.Set("modStartDate", "2021-10-29T12:00:00:000 UTC-00:00")
q.Set("modEndDate", "2021-10-30T00:00:000 UTC-00:00")
q.Set("resultsPerPage", "5000")
req.URL.RawQuery = q.Encode()
client := http.Client{}
resp, err := client.Do(req)
响应状态是 404。我不清楚我缺少什么。我在第二个中缺少的第一个 GET 请求是什么?
作为参考,我正在使用的 API: https://nvd.nist.gov/developers/vulnerabilities
【问题讨论】:
-
我们使用 q.Add() 代替 q.Set()。这对你有用吗?
-
@jcfollower:更改为
q.Set()时仍然得到404 -
@JimB:手动编码版本有效,我得到了预期的数据。时间里没有多余的
:00。 -
哦,它们的格式是
yyyy-MM-dd'T'HH:mm:ss:SSS,所以你在第二个版本中缺少了一个时间字段(实际上阅读错误信息在这里有帮助)