日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

golang 请求带验证信息的坑

發(fā)布時(shí)間:2024/4/17 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。