如何使用Go添加Authorization
标头到urlfetch
客户端?
java
和python
已回答了类似的问题,但Go
未回答。
答案 0 :(得分:2)
urlfetch.Client(ctx)
返回HTTP客户端(http://godoc.org/google.golang.org/appengine/urlfetch#Client)
http.Client
包含Get
,Post
等方法...它还有Do
,您可以提出任意请求。使用http.NewRequest
创建请求:
req, err := http.NewRequest("GET", "http://www.google.com", nil)
然后你可以添加这样的标题:
req.Header.Set("Authorization", "whatever")
并致电Do
:
res, err := client.Do(req)
答案 1 :(得分:2)
我是Go的新手,请原谅这段代码是因为丑陋/畸形/只是错误。
虽然我已经按照自己的方式工作,但在appengine上遇到了同样的问题。
@ Caleb上面的答案是一个很大的帮助。我刚刚添加了一些细节,以帮助可能遇到类似问题的人。
这是我的import语句:
Import {
"appengine"
"appengine/urlfetch"
"bytes"
"encoding/json"
"fmt"
"golang.org/x/oauth2"
"io/ioutil"
"net/http"
"net/url"
}
这是一个接收和传入身份验证回调请求的函数,然后回复来自身份验证服务器的访问令牌请求。在这种情况下,fitbit需要将Authentication头设置为" Basic"有一些额外的信息。我无法弄清楚如何使用库存Oauth2库来实现这一点,这似乎不容易改变请求头。
正如您可以看到传入请求(r)的上下文。从该上下文中,我们从urlfetch获取http.Client。
然后我们打包并发回请求,并附上一些授权信息。
收到回复后,我们会将结果打印到浏览器中。
希望这有帮助!
func authCallbackHandler(w http.ResponseWriter, r *http.Request) {
data := url.Values{}
data.Set("client_id", "231343")
data.Add("grant_type", "authorization_code")
data.Add("redirect_uri", "http://localhost:8080/callmebacklaterok")
data.Add("code", "authcode123132")
encodedData := data.Encode()
c := appengine.NewContext(r)
client := urlfetch.Client(c)
urlStr := "https://api.fitbit.com/oauth2/token"
req, _ := http.NewRequest("POST", urlStr,bytes.NewBufferString(encodedData))
req.Header.Add("Authorization", "Basic RmFuY3kgbWVldGluZyB5b3UgaGVyZSEg")
resp, _ := client.Do(req)
defer resp.Body.Close()
fmt.Fprint(w, resp)
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err.Error())
}
var bodydata interface{}
err = json.Unmarshal(body, &bodydata)
if err != nil {
panic(err.Error())
}
fmt.Fprint(w, bodydata)
}