【问题标题】:Basic HTTP Auth in GoGo 中的基本 HTTP 身份验证
【发布时间】:2023-04-07 16:22:01
【问题描述】:

我正在尝试使用下面的代码进行基本的 HTTP 身份验证,但它抛出了以下错误:

2013/05/21 10:22:58 获取 mydomain.com:不支持的协议方案“” 退出状态 1

func basicAuth() string {
    var username string = "foo"
    var passwd string = "bar"
    client := &http.Client{}
    req, err := http.NewRequest("GET", "mydomain.com", nil)
    req.SetBasicAuth(username, passwd)
    resp, err := client.Do(req)
    if err != nil{
        log.Fatal(err)
    }
    bodyText, err := ioutil.ReadAll(resp.Body)
    s := string(bodyText)
    return s
}

知道我做错了什么吗?

【问题讨论】:

    标签: go basic-authentication


    【解决方案1】:

    您需要为 NewRequest 指定协议,例如“http://”,见here

    req, err := http.NewRequest("GET", "http://mydomain.com", nil)
    

    【讨论】:

      【解决方案2】:

      潜在的“问题”是如果您的网站进行任何重定向... Go-lang 会将您指定的标头放在重定向上。 (我必须做wireshark才能看到这个!您可以通过右键单击然后“检查元素”并单击网络选项卡在chrome中快速找到)

      您需要定义一个重定向函数,将标头重新添加进去。

      func basicAuth(username, password string) string {
        auth := username + ":" + password
        return base64.StdEncoding.EncodeToString([]byte(auth))
      }
      
      func redirectPolicyFunc(req *http.Request, via []*http.Request) error{
        req.Header.Add("Authorization","Basic " + basicAuth("username1","password123"))
        return nil
      }
      
      func main() {
        client := &http.Client{
          Jar: cookieJar,
          CheckRedirect: redirectPolicyFunc,
        }
      
        req, err := http.NewRequest("GET", "http://localhost/", nil)
        req.Header.Add("Authorization","Basic " + basicAuth("username1","password123")) 
        resp, err := client.Do(req)
      }
      

      【讨论】:

      • 非常有用的提示 - 我自己也遇到了同样的问题。在重定向功能中,您可以使用req.SetBasicAuth("username1", "password123") 而不是设置标头本身。
      • 但要小心,如果您知道您的端点不执行重定向,则不建议您在安全方面实施
      • 或者你可以http.NewRequest("GET", "http://user:pass@localhost/", nil)
      猜你喜欢
      • 1970-01-01
      • 2021-03-21
      • 2011-11-12
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多