尝试创建问题时,来自GitHub API 422的意外错误响应

时间:2019-01-02 14:55:15

标签: go github-api

将问题发布到GitHub API V3时,我得到了意外的响应。即422不可处理实体。但是,错误的详细信息是针对搜索端点的,而不是针对POST创建端点的。 {“消息”:“验证失败”,“错误”:[{“资源”:“搜索”,“字段”:“ q”,“代码”:“缺少”}]],“ documentation_url”:“ {{3 }}“}

我的直觉是我弄乱了json,但它非常简单,看不到问题。 我已经尝试过在这里和其他地方发布的各种解决方案,但没有发现我做错了什么。这是一个编码练习,而不是用于生产的任何东西,但使我有些发疯。

  • 已在发布之前在Debug中测试了请求正文。 {“ title”:“ Hello World”,“ body”:“ dfsdfsdf \ n”}
  • 尝试删除正文,因为它是可选的,同样的问题。
  • 在Debug中测试,该请求的类型为POST
  • 在Debug中测试了授权头是否正确。
  • 已删除授权密钥,并按预期收到401。

发布功能:

func CreateIssue (issue *NewIssue) (*IssueDetailsResult, error){
issueJson, err := json.Marshal(issue)
if err != nil {
    log.Fatal(err)
    os.Exit(1)
}
req, err := http.NewRequest("POST", github.IssuesURL, bytes.NewBuffer(issueJson))
req.Header.Set("Authorization", "token "+os.Getenv("UPGITUSER"))
req.Header.Set( "Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
    log.Fatal(err)
    os.Exit(1)
}
if resp.StatusCode != http.StatusCreated {
    bodyBytes, _ := ioutil.ReadAll(resp.Body)
    body := string(bodyBytes)
    resp.Body.Close()
    return nil, fmt.Errorf("create issue failed:%s", resp.Status + "\ntext: " + body)
}
var result IssueDetailsResult
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
    resp.Body.Close()
    return nil, err
}
resp.Body.Close()
return &result, nil

}

希望从GitHubAPI获得201。

1 个答案:

答案 0 :(得分:1)

响应是强烈的指示,表明请求正在发送到错误的端点。

您可以使用net/http/httputil的{​​{3}}来检查您要发送的请求,并确保它们符合您的期望。