leo*_*sas 48 go basic-authentication
我正在尝试使用下面的代码进行基本的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
}
Run Code Online (Sandbox Code Playgroud)
知道我可能做错了吗?
小智 54
潜在的"问题"是,如果您的网站进行任何重定向... 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)
}
Run Code Online (Sandbox Code Playgroud)
Rya*_*yan 40
您需要为NewRequest指定协议,例如"http://",请参见此处.
req, err := http.NewRequest("GET", "http://mydomain.com", nil)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63840 次 |
| 最近记录: |