第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用 Golang 登錄私有站點(diǎn)并拉取信息

使用 Golang 登錄私有站點(diǎn)并拉取信息

我嘗試使用 golang 登錄網(wǎng)站的私人區(qū)域并提取一些信息,但我似乎不太正確。我設(shè)法獲取登錄頁面以獲取 csrf 令牌,然后我將 csrf 令牌與登錄信息一起發(fā)布到登錄頁面,然后我就可以登錄了。如果我停在這一點(diǎn)上,我可以看到我被重定向的頁面。但是,從此時(shí)起的任何后續(xù)調(diào)用都會(huì)將我重定向回登錄。代碼package mainimport (    "github.com/PuerkitoBio/goquery"    "io"    _ "io/ioutil"    "log"    "net/http"    "net/url"    _ "strings"    "sync")type Jar struct {    sync.Mutex    cookies map[string][]*http.Cookie}func NewJar() *Jar {    jar := new(Jar)    jar.cookies = make(map[string][]*http.Cookie)    return jar}func (jar *Jar) SetCookies(u *url.URL, cookies []*http.Cookie) {    jar.Lock()    jar.cookies[u.Host] = cookies    jar.Unlock()}func (jar *Jar) Cookies(u *url.URL) []*http.Cookie {    return jar.cookies[u.Host]}func NewJarClient() *http.Client {    return &http.Client{        Jar: NewJar(),    }}func fetch(w http.ResponseWriter, r *http.Request) {    // create the client    client := NewJarClient()    // get the csrf token    req, _ := http.NewRequest("GET", "http://www.domain.com/login", nil)    resp, err := client.Do(req)    if err != nil {        log.Fatal(err)    }    doc, err := goquery.NewDocumentFromResponse(resp)    if err != nil {        log.Fatal(err)    }    csrfToken := ""    if val, ok := doc.Find(`head meta[name="csrf-token-value"]`).Attr("content"); ok {        csrfToken = val    }    // post on the login form.    resp, _ = client.PostForm("http://www.domain.com/login", url.Values{        "UserLogin[email]":    {"the email"},        "UserLogin[password]": {"the password"},        "csrf_token":          {csrfToken},    })    doc, err = goquery.NewDocumentFromResponse(resp)    if err != nil {        log.Fatal(err)    }知道我在這里缺少什么嗎?
查看完整描述

1 回答

?
至尊寶的傳說

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊

好的,問題是 cookie jar 實(shí)現(xiàn),更具體地說是 SetCookies 函數(shù),現(xiàn)在是:


func (jar *Jar) SetCookies(u *url.URL, cookies []*http.Cookie) {

    jar.Lock()

    jar.cookies[u.Host] = cookies

    jar.Unlock()

}

這是錯(cuò)誤的,因?yàn)樾碌?cookie 不會(huì)被添加到現(xiàn)有的 cookie 中,它們只會(huì)作為新的 cookie 丟棄舊的而添加。


似乎正確的方法是:


func (jar *Jar) SetCookies(u *url.URL, cookies []*http.Cookie) {

    jar.Lock()

    if _, ok := jar.cookies[u.Host]; ok {

        for _, c := range cookies {

            jar.cookies[u.Host] = append(jar.cookies[u.Host], c)

        }

    } else {

        jar.cookies[u.Host] = cookies

    }

    jar.Unlock()

}


查看完整回答
反對(duì) 回復(fù) 2022-01-10
  • 1 回答
  • 0 關(guān)注
  • 183 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)