go - 尝试创建问题时来自 GitHub API 422 的意外错误响应
问题描述
将问题发布到 GitHub API V3 时,我收到了意外的响应。即422不可处理实体。但是,错误的详细信息是针对搜索端点而不是 POST 创建端点。{"message":"验证失败","errors":[{"resource":"Search","field":"q","code":"missing"}],"documentation_url":" https:// /developer.github.com/v3/search "}
我的直觉是我搞砸了 json,但这很简单,我看不到问题所在。我已经尝试过在这里和其他地方发布的各种解决方案,但没有发现我做错了什么。这是一个编码练习,而不是任何用于生产的东西,但让我有点发疯。
- 在 Debug 中测试了在发布之前请求正文是什么。{"title":"Hello World","body":"dfsdfsdf\n"}
- 尝试移除身体,因为它是可选的,同样的问题。
- 在 Debug 中测试请求是 POST 类型
- 在调试中测试授权标头是正确的。
- 删除授权密钥并按预期收到 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。
解决方案
响应是一个强有力的指标,表明请求被发送到错误的端点。
您可以使用net/http/httputil
's DumpRequestOut来检查您将要发送的请求,并确保它们是您所期望的。
推荐阅读
- mysql - MySQL SELECT 查询在哪里查找不在相关表中的记录
- r - 如何使用 R 中的 ggplot 在一个绘图上绘制两个不同的观察结果?
- bash - 当只有链接可用时如何获取文件的总文件大小
- c++ - DXRSDK_v0.09.01 无法在 Visual Studio 2017 上运行
- php - 想要获取数组值
- javascript - D3 v4 重新渲染嵌套对象,`enter()` 和 `exit()` 出现问题
- javascript - Vuejs:event_id 未定义
- codesniffer - 如何配置 PHP CodeSniffer 以允许具有任何缩进的数组?
- sql-server - 根据实际值检查表格内容
- javascript - 单击按钮时,如何在发送我的 ajax 之前调用我的验证函数?