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

如何从另一个请求返回正文

如何从另一个请求返回正文

Go
潇湘沐 2022-04-20 19:28:50
req, err := http.NewRequest("GET", "https://api.github.com/repos/octocat/Hello-World/pulls/1347", nil)req.Header.Set("Accept", "application/vnd.github.v3.patch")if err != nil {    check(err)}body, err := ioutil.ReadAll(req.Body)ctxt.JSON(http.StatusOK, body)在这里,我需要从 github api 的主体发送 api 响应。但在这里我收到以下错误:“运行时错误:无效的内存地址或 nil 指针取消引用”
查看完整描述

2 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

您正在创建一个带有 nil 正文的新 GET 请求。请参阅 http.NewRequest 的函数签名

func NewRequest(method, url string, body io.Reader) (*Request, error)

因此,当您访问 resp.Body 时,它当然会为零。

此外,http.NewRequest 只是返回一个请求,它实际上并没有执行它。

要使用您的请求实际发出 GET 请求,您需要将其传递给 http 客户端的Do方法。像这样:

response, err := http.DefaultClient.Do(resp)

编辑:我还要补充一点,将您的请求命名resp为令人困惑。我建议将变量重命名为reqrequest


查看完整回答
反对 回复 2022-04-20
?
慕少森

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

此代码将解决您的问题。


client := &http.Client{}

apiURL := "https://api.github.com/repos/octocat/Hello-World/pulls/1347"

req, err := http.NewRequest("GET", apiURL, nil)

if err != nil {

    check(err)

}

req.Header.Add("Accept", "application/vnd.github.v3.patch")

response, err := client.Do(req)

if err != nil {

    check(err)

}

defer response.Body.Close()

contents, err := ioutil.ReadAll(response.Body)

if err != nil {

    check(err)

}

ctxt.JSON(http.StatusOK, string(contents))


查看完整回答
反对 回复 2022-04-20
  • 2 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

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