亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何發送帶有登錄數據的 GET 請求并將 cookie 數據保存到 txt 文件?

如何發送帶有登錄數據的 GET 請求并將 cookie 數據保存到 txt 文件?

Go
當年話下 2022-11-23 10:24:47
我想發送帶有登錄數據的 GET 請求并將 cookie 數據保存到 txt 文件。我有一個卷曲數據   curl -c cookies.txt 'http://localhost:8080/api/v2/auth/login' \  -H 'sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="98"' \  -H 'sec-ch-ua-mobile: ?1' \  -H 'User-Agent: Mozilla/5.0 (Linux; Android 9; BND-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.106 Mobile Safari/537.36' \  -H 'Content-type: application/x-www-form-urlencoded; charset=UTF-8' \  -H 'Accept: text/javascript, text/html, application/xml, text/xml, */*' \  -H 'Referer: http://localhost:8080/' \  -H 'X-Requested-With: XMLHttpRequest' \  -H 'sec-ch-ua-platform: "Android"' \  --data-raw 'username=admin&password=pasxxord7' \  --compressed我需要將這個 curl 轉換為 Go;我試過在線轉換器,它出錯了,我認為他們沒有任何能力將 cookie 存儲到 txt 文件。我有一個示例 Go 文件,它不能發送用戶名和密碼,但我認為它確實保存了 cookies.txt 文件:我的 main.go 內容:package mainimport "net/http/cookiejar"import "net/http"import "encoding/json"import "io/ioutil"import "fmt"func main(){    cookies := make(map[string][]*http.Cookie)    jar, _ := cookiejar.New(nil)    client := http.Client{Jar: jar}    r, err := client.Get("http://localhost:8080/api/v2/auth/login")    if err != nil {        fmt.Println(err)        return    }    siteCookies := jar.Cookies(r.Request.URL)    cookies[r.Request.URL.String()] = siteCookies    data, _ := json.Marshal(cookies)    ioutil.WriteFile("cookies.txt", data, 0644)}我需要主要將這個curl標志和數據轉換并添加--data-raw 'username=admin&password=pasxxord7'到Go中。
查看完整描述

1 回答

?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

當您使用 curl 標志時--data-raw發送POST請求。您可以使用詳細輸出標志來驗證這一點-v,例如:


$ curl -c cookies.txt 'http://requestbin.net/r/40vmgerp' \

  -H 'sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="98"' \

  -H 'sec-ch-ua-mobile: ?1' \

  -H 'User-Agent: Mozilla/5.0 (Linux; Android 9; BND-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.106 Mobile Safari/537.36' \

  -H 'Content-type: application/x-www-form-urlencoded; charset=UTF-8' \

  -H 'Accept: text/javascript, text/html, application/xml, text/xml, */*' \

  -H 'Referer: http://localhost:8080/' \

  -H 'X-Requested-With: XMLHttpRequest' \

  -H 'sec-ch-ua-platform: "Android"' \

  --data-raw 'username=admin&password=pasxxord7' \

  --compressed -v


* Connected to requestbin.net (172.67.190.62) port 80 (#0)

> POST /r/40vmgerp HTTP/1.1 <--------------------

> Host: requestbin.net

> Accept-Encoding: deflate, gzip

> sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="98"

> sec-ch-ua-mobile: ?1

...

通常 GET 請求不用于在正文中傳輸數據,因此在給定正確POST時使用 as curl 會自動執行。data-raw


根據您的示例標題和數據,data-raw您似乎正在使用表單值,也可以將其指定為:


curl localhost -F 'username=admin' -F 'password=pasxxord7'


這將添加內容類型 multipart/form-data 標頭并自動作為 POST 發送。這也具有進行任何必要轉義的優點。


要在 Go 中重新創建您的 curl 請求,如下所示:


package main


import (

    "encoding/json"

    "fmt"

    "net/http"

    "net/url"

    "os"

    "strings"

)


func main() {

    data := url.Values{}

    data.Set("username", "admin")

    data.Set("password", "pasxxord7")


    body := strings.NewReader(data.Encode())


    req, err := http.NewRequest(http.MethodPost, "https://requestbin.net/r/40vmgerp", body)

    if err != nil {

        panic(err)

    }


    // Omitted other headers for brevity.

    req.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")

    req.Header.Set("Accept", "text/javascript, text/html, application/xml, text/xml, */*")


    resp, err := http.DefaultClient.Do(req)

    if err != nil {

        panic(err)

    }

    defer resp.Body.Close()


    cookies := resp.Cookies()


    if len(cookies) > 0 {

        cookieFile, err := os.Create("cookies.txt")

        if err != nil {

            panic(err)

        }

        defer cookieFile.Close()


        encoder := json.NewEncoder(cookieFile)


        for _, cookie := range cookies {

            // fmt.Fprintln(cookieFile, cookie.String()) // write plain text to file

            if err := encoder.Encode(cookie); err != nil {

                panic(err)

            }

        }

    } else {

        fmt.Println("No cookies found.")

    }

}

請注意,上面的示例使用 RequestBin 而不是 localhost,但如果您添加其他標頭,則應該是完整的。


您不需要使用 Cookie Jar,因為它用于在傳出請求中存儲和發送 cookie。看來您只對存儲從服務器發回的 cookie 感興趣,因此您需要.Cookies()在響應上調用該方法并使用返回的內容。


查看完整回答
反對 回復 2022-11-23
  • 1 回答
  • 0 關注
  • 184 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號