如何使用Go向urlscanio发出发布请求?

时间:2018-11-07 23:13:20

标签: go

我正在做的是尝试提交要扫描到urlscan.io的URL。我可以进行搜索,但是提交有问题,尤其是正确发送正确的标题/编码数据。

在他们的网站上提交网址的方法:

curl -X POST“ https://urlscan.io/api/v1/scan/” \       -H“内容类型:application / json” \       -H“ API密钥:$ apikey” \       -d“ {\” url \“:\” $ url \“,\” public \“:\” on \“}”

这可以满足Api密钥标头的要求,但

req.Header.Add("API-Key", authtoken)

这是我的尝试失败

data := make(url.Values)
data.Add("url", myurltoscan)

我一直在努力的URL属性。

这是我的错误: “ message”:“缺少URL属性”,   “ description”:“提供的URL不正确,请指定它,包括协议,主机和路径(例如http://example.com/bar)”,   “状态”:400

1 个答案:

答案 0 :(得分:1)

url.Valuemap[string][]string,其中包含查询参数或POST形式中使用的值。如果您尝试执行以下操作,则将需要它:

curl -X GET https://urlscan.io/api/v1/scan?url=<urltoscan>

curl -X POST -F 'url=<urltoscan>' https://urlscan.io/api/v1/scan

请参阅文档https://golang.org/pkg/net/url/#Values

要发送带有JSON数据的常规POST请求,您可以将JSON编码为字节并以http.Post发送:

var payload = []byte(`{"url":"<your-url>","public":"on"}`)
req, err := http.NewRequest("POST", url, 
bytes.NewBuffer(payload))
req.Header.Set("API-Key", authtoken)
req.Header.Set("Content-Type", "application/json")

client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
        panic(err)
}
defer resp.Body.Close()