【问题标题】:How to Fix http: "panic serving 127.0.0.1:54063: 403 Forbidden: Forbidden"如何修复 http:"panic serving 127.0.0.1:54063:403 Forbidden: Forbidden"
【发布时间】:2020-05-24 09:46:37
【问题描述】:

可以看到的错误是 client.GetKeyStats 函数返回的 403 Forbidden。

基于源代码无需认证。 源代码:https://github.com/timpalpant/go-iex "你感到恐慌的原因是直接在这个函数中引发了恐慌。

package main

import (
  "fmt"
  "github.com/timpalpant/go-iex"
  "html/template"
  "net/http"
)

func process(w http.ResponseWriter, r *http.Request) {

  client := iex.NewClient(&http.Client{})
  symbols := []string{"AAPL", "SPY"}
  stat, err := client.GetKeyStats(symb)

  if err != nil {
    panic(err)
  }
  var s []string

  for _, symb := range symbols {

    s = append(s, fmt.Sprintf("DividendYield: %s", stat.DividendYield))
  }

  t, _ := template.ParseFiles("Dividends.html")
  t.Execute(w, s)

}

func main() {

  server := http.Server{
    Addr: "127.0.0.1:8080",
  }
  http.HandleFunc("/process", process)
  server.ListenAndServe()

}

可以看到的错误是 client.GetKeyStats 函数返回的 403 Forbidden。您是否需要以某种方式对该客户端进行身份验证? 无论哪种方式,这似乎都不是 Go 作为一门语言的相关问题。”

2020/01/27 03:34:59 http: 恐慌服务 127.0.0.1:54063: 403 禁止:禁止

。 goroutine 19 [运行]: net/http.(*conn).serve.func1(0xc000162820) /usr/local/opt/go/libexec/src/net/http/server.go:1767 +0x139 恐慌(0x1442140,0xc0002defb0) /usr/local/opt/go/libexec/src/runtime/panic.go:679 +0x1b2 主进程(0x158d1e0,0xc0001ba000,0xc0001a8000) /Users/ed/Documents/Coding/Golang/src/web/web.go:18 +0x373 net/http.HandlerFunc.ServeHTTP(0x150b0d0, 0x158d1e0, 0xc0001ba000, 0xc0001a8000) /usr/local/opt/go/libexec/src/net/http/server.go:2007 +0x44 net/http.(*ServeMux).ServeHTTP(0x18d3180, 0x158d1e0, 0xc0001ba000, 0xc0001a8000) /usr/local/opt/go/libexec/src/net/http/server.go:2387 +0x1bd 网络/http.serverHandler.ServeHTTP(0xc0001640e0, 0x158d1e0, 0xc0001ba000, 0xc0001a8000) /usr/local/opt/go/libexec/src/net/http/server.go:2802 +0xa4 net/http.(*conn).serve(0xc000162820, 0x158dce0, 0xc00019e000) /usr/local/opt/go/libexec/src/net/http/server.go:1890 +0x875 由 net/http.(*Server).Serve 创建 /usr/local/opt/go/libexec/src/net/http/server.go:2928 +0x384 2020/01/27 03:34:59 http: 恐慌服务 127.0.0.1:54064:403 禁止:禁止 goroutine 20 [运行]: net/http.(*conn).serve.func1(0xc0001628c0) /usr/local/opt/go/libexec/src/net/http/server.go:1767 +0x139 恐慌(0x1442140,0xc0003cab90) /usr/local/opt/go/libexec/src/runtime/panic.go:679 +0x1b2 主进程(0x158d1e0,0xc00022d420,0xc0001a6000) /Users/ed/Documents/Coding/Golang/src/web/web.go:18 +0x373 net/http.HandlerFunc.ServeHTTP(0x150b0d0, 0x158d1e0, 0xc00022d420, 0xc0001a6000) /usr/local/opt/go/libexec/src/net/http/server.go:2007 +0x44 net/http.(*ServeMux).ServeHTTP(0x18d3180, 0x158d1e0, 0xc00022d420, 0xc0001a6000) /usr/local/opt/go/libexec/src/net/http/server.go:2387 +0x1bd 网络/http.serverHandler.ServeHTTP(0xc0001640e0, 0x158d1e0, 0xc00022d420, 0xc0001a6000) /usr/local/opt/go/libexec/src/net/http/server.go:2802 +0xa4 net/http.(*conn).serve(0xc0001628c0, 0x158dce0, 0xc0000a0340) /usr/local/opt/go/libexec/src/net/http/server.go:1890 +0x875 由 net/http.(*Server).Serve 创建 /usr/local/opt/go/libexec/src/net/http/server.go:2928 +0x384 2020/01/27 03:34:59 http: 恐慌服务 127.0.0.1:54066:403 Forbidden: Forbidden goroutine 47 [运行中]:

【问题讨论】:

    标签: go


    【解决方案1】:

    你说的确实是timpalpant/go-iex issue 33,跟在golang/go issue 36883之后

    尝试先运行client_test.go#TestGetKeyStats()

    我的问题是看看你能否指出根本原因,是我的代码还是 API 源

    这里是源代码,而不是 API:Go HTTP 客户端的 goroutine 中的恐慌会生成该错误消息。

    【讨论】:

      【解决方案2】:

      自上次更新 Go 库以来,API 发生了变化。因此,它似乎曾经接受未经身份验证的 API 请求,但现在,根据文档,您需要一个令牌:https://iexcloud.io/docs/api/

      身份验证

      API 令牌

      IEX Cloud 使用您帐户的 API 令牌对您的 API 请求进行身份验证。要使用任何 IEX Cloud API,您必须在每个请求中传递一个 API 令牌。如果您在发出 API 请求时未包含您的 API 令牌,或者使用不正确或禁用的令牌,IEX Cloud 将返回错误。

      您必须使用最新的 Go 库,例如 documentation 中建议的库

      https://github.com/goinvest/iexcloud

      【讨论】:

        猜你喜欢
        • 2020-08-16
        • 2016-06-07
        • 2019-11-03
        • 1970-01-01
        • 1970-01-01
        • 2019-09-22
        • 2015-12-05
        • 2011-03-18
        • 2020-09-28
        相关资源
        最近更新 更多