golang 请求带验证信息的坑
生活随笔
收集整理的這篇文章主要介紹了
golang 请求带验证信息的坑
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
最近用golang 和python對(duì)接接口,由于之前驗(yàn)證那塊沒有設(shè)置好,然后又為了進(jìn)度,最近決定用http自帶的basic 驗(yàn)證,
php的代碼很快就驗(yàn)證通過了
/*** @param $url* @param $filename* @param $path* @param $type 上傳代碼*/private function upload_file($url,$path){$data = array('avatar'=>new \CURLFile(realpath($path)));$ch = curl_init();//設(shè)置帳號(hào)和帳號(hào)名curl_setopt($ch, CURLOPT_USERPWD, 'xxx:xxxx' );curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_POST, true );curl_setopt($ch, CURLOPT_POSTFIELDS, $data);curl_setopt($ch, CURLOPT_HEADER, false);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_getinfo($ch);$return_data = curl_exec($ch);curl_close($ch);return $return_data;}python由于用的是2.7的版本,代碼如下
# -*- coding: utf-8 -*-import urllib2 # Create an OpenerDirector with support for Basic HTTP Authentication... auth_handler = urllib2.HTTPBasicAuthHandler() auth_handler.add_password(realm='PDQ Application',uri='http://localhost:8080/v1/xxx/index',user='xxx',passwd='xxxx') opener = urllib2.build_opener(auth_handler)以下是正確的請(qǐng)求方式 #import requests #req = requests.post('http://localhost:8080/v1/xxxx/index', auth=('xxxx', 'xxxx'),params={"lists":[{"1212"}]}) #print(req.text)golang 這邊的驗(yàn)證大概代碼如下,用的是beego框架;然后寫上一個(gè)filter的中間鍵自已實(shí)現(xiàn)的驗(yàn)證,弄死都讀不到Authorization,
package middlewareimport ("encoding/base64""github.com/astaxie/beego/context""github.com/astaxie/beego" ) const(HeaderAuthorization = "Authorization"basic = "Basic" )func Author(ctx *context.Context) bool {auth := ctx.Input.Header(HeaderAuthorization)l := len(basic)if len(auth) > l+1 && auth[:l] == basic {b, err := base64.StdEncoding.DecodeString(auth[l+1:])if err != nil {return false}cred := string(b)for i := 0; i < len(cred); i++ {if cred[i] == ':' {// Verify credentialsreturn validator(cred[:i], cred[i+1:])}}}return false } func validator(user string ,pass string) bool {if user == beego.AppConfig.String("auth::appkey") && pass == beego.AppConfig.String("auth::appsecret"){return true}return false }后面還是強(qiáng)大的http://stackoverflow.com/questions/21936332/idiomatic-way-of-requiring-http-basic-auth-in-go 這個(gè)上面找到了答案
func main() {// atcd := dispatcher.NewAtcDispatcher(4)// atcd.Run()if beego.BConfig.RunMode == "dev" {beego.BConfig.WebConfig.DirectoryIndex = truebeego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"//} else {//權(quán)限檢查var FilterAuth = func(ctx *context.Context) {if !middleware.Author(ctx) {ctx.ResponseWriter.Header().Set("WWW-Authenticate", `Basic realm="MY REALM"`)ctx.ResponseWriter.WriteHeader(401)ctx.ResponseWriter.Write([]byte("{\"ResultCode\": 401,\"ResultMsg\": \"你沒有權(quán)限\"}\n"))}}beego.InsertFilter("/v1/*", beego.BeforeStatic, FilterAuth)}beego.Run() }然后就可以通過:curl http://xxx:xxx@127.0.0.1:8080/v1/xx/12 這樣訪問就沒有問題了
?
golang requiring HTTP Basic Auth?
總結(jié)
以上是生活随笔為你收集整理的golang 请求带验证信息的坑的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux定时运行程序脚本
- 下一篇: 解决alert在ios版微信中显示url