Go语言构造HTTP GET请求返回404,与http.Get调用结果不一致问题排查
问题原因及解决方案
核心问题1:参数格式填写错误
你第二段代码里的modEndDate参数值少了秒位字段,接口要求的时间格式为年-月-日T时:分:秒:毫秒 时区,对比你正常请求的参数:
- 正确值:
2021-10-30T00:00:00:000 UTC-00:00 - 错误值:
2021-10-30T00:00:000 UTC-00:00
错误值少了00的秒位,接口无法识别该时间参数,直接返回404。
核心问题2:空格编码格式不兼容
Go标准库的url.Values.Encode()方法默认会将参数中的空格编码为+,但NVD接口仅接受%20格式的空格编码,编码格式不匹配也会导致接口参数解析失败。
修复后的代码示例
import "strings" 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() // 补全modEndDate的秒位字段 q.Set("modStartDate", "2021-10-29T12:00:00:000 UTC-00:00") q.Set("modEndDate", "2021-10-30T00:00:00:000 UTC-00:00") q.Set("resultsPerPage", "5000") // 将编码后的+替换为%20适配接口要求 req.URL.RawQuery = strings.ReplaceAll(q.Encode(), "+", "%20") client := http.Client{} resp, err := client.Do(req)
内容的提问来源于stack exchange,提问作者dangeroushobo
相关产品推荐
相关产品推荐

