为了账号安全,请及时绑定邮箱和手机立即绑定

http.get() 返回“422 无法处理的实体”

http.get() 返回“422 无法处理的实体”

Go
摇曳的蔷薇 2023-05-15 10:15:02
我编写了一个 go 程序来查询 github 存储库“golang:go”中的问题。http.Get() 以状态“200 OK”响应。然后我查询最近 3 个月内创建的问题,http.Get() 返回“422 Unprocessable Entity”。下面是程序import(        "fmt"        "time"        "net/http"        "net/url"        )func main() {        var ret error        var str string         q:=url.QueryEscape("repo:golang/go")        fmt.Println("q:", q)        urlStr := "https://api.github.com/search/issues" +"?q=" + q         fmt.Println("urlStr:", urlStr)        resp, ret:= http.Get(urlStr)        fmt.Println("ret :", ret, "resp.status :", resp.Status)        timeStr := "created:"        to := time.Now()        from := to.AddDate(0, -3, 0)        str = to.Format("2006-01-02")        timeStr = timeStr + str + ".."        fmt.Printf("time1 : %s\n", timeStr)        str = from.Format("2006-01-02")        timeStr = timeStr + str         fmt.Printf("time2 : %s\n", timeStr)        q=url.QueryEscape("repo:golang/go" + timeStr)        fmt.Println("q:", q)        urlStr = "https://api.github.com/search/issues" +"?q=" + q         fmt.Println("urlStr:", urlStr)        resp, ret = http.Get(urlStr)        fmt.Println("ret :", ret, "resp.status :", resp.Status) }   我用它来形成查询。我是网络编程的新手,无法理解我在形成第二个查询时出错的地方。
查看完整描述

3 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

对我有用的两件事

1)反转你的timeStr中的“from”和“to”

2)不要在timeStr上使用QueryEscape,只需像这样添加它

   urlStr = "https://api.github.com/search/issues" + "?q=repo:golang/go+" + timeStr

不要使用符号(我最初用这个回答)使用加号或空格。

查看完整回答
反对 回复 2023-05-15
?
呼唤远方

TA贡献1856条经验 获得超11个赞

我像下面这样使用,如果我不转义第二个网址,它对我有用:


package main

import(

        "fmt"

        "time"

        "net/http"

        "net/url"

        )


func main() {

        var ret error

        var str string 


        q:=url.QueryEscape("repo:golang/go")

        fmt.Println("q:", q)

        urlStr := "https://api.github.com/search/issues" +"?q=" + q 

        fmt.Println("urlStr:", urlStr)

        resp, ret:= http.Get(urlStr)

        fmt.Println("ret :", ret, "resp.status :", resp.Status)


        timeStr := "created:"

        to := time.Now()

        from := to.AddDate(0, -3, 0)


        str = to.Format("2006-01-02")

        timeStr = timeStr + str + ".."

        fmt.Printf("time1 : %s\n", timeStr)


        str = from.Format("2006-01-02")

        timeStr = timeStr + str 

        fmt.Printf("time2 : %s\n", timeStr)


        urlStr = "https://api.github.com/search/issues" +"?q=" + "repo:golang/go&created:2018-11-29..2018-08-29"

        fmt.Println("urlStr:", urlStr)

        resp, ret = http.Get(urlStr)

        fmt.Println("ret :", ret, "resp.status :", resp.Status) 

}

输出是:


q: repo%3Agolang%2Fgo

urlStr: https://api.github.com/search/issues?q=repo%3Agolang%2Fgo

ret : <nil> resp.status : 200 OK

time1 : created:2018-11-29..

time2 : created:2018-11-29..2018-08-29

urlStr: https://api.github.com/search/issues?q=repo:golang/go&created:2018-11-29..2018-08-29

ret : <nil> resp.status : 200 OK


查看完整回答
反对 回复 2023-05-15
?
慕少森

TA贡献2019条经验 获得超9个赞

当客户端发送无效输入时,包括来自github 的API 在内的许多 API都会返回状态代码。422在您的代码中,错误的输入是由连接两个没有“分隔符”的限定符的行生成的。

因此,这"repo:golang/go" + timeStr将导致q包含单个“合并”限定符的值看起来像这样:

"repo:golang/gocreated:2018-1...

要修复您的代码,您只需在两个限定符之间添加一个空格,您的查询就可以正常工作。

q=url.QueryEscape("repo:golang/go " + timeStr)


查看完整回答
反对 回复 2023-05-15
  • 3 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信