Golang Cookie

#1
Heyho Leute,

ich versuche mich neuerdings an Golang, hat da eventuell jemand Erfahrungen mit?

Code:
package main


import (

    "fmt"

    "log"

    "net/http"

    "net/http/cookiejar"

)


func main() {


    request, err := http.NewRequest("GET", "https://www.webseite.de/login.html", nil)

    if err != nil {

        log.Fatal(err)

    }

}
Problem:

Cookie Jar Anwendung damit man die Cookies speichern kann, sobald man einen Webseiten REQUEST schickt.
Oder sollte man ein GET schicken und dann das Cookie speichern?

Möchte halt gern nach dem Request das Cookie von der Webseite speichern/verwenden um mich dann mit den Cookie Informationen anzumelden über ein Form POST.

Man kann das sogar online testen, bzw Veränderungen sofort prüfen.

https://play.golang.org/p/fP-4a4Z0PuR
Hoffe mir kann jemand bei meinem Ansatzproblem weiterhelfen.
 
#2
Code:
package main


import (

    "bytes"

    "io/ioutil"

    "net/http"

    "net/http/cookiejar"

    "net/url"

    "github.com/PuerkitoBio/goquery"

    "log"

)


func checkError(err error) {

    if err != nil {

        log.Fatal(err)

    }

}


func CheckThis(VerleihUsername string, VerleihPassword string) error {

    cookieJar, _ := cookiejar.New(nil)


    client := &http.Client{

        Jar: cookieJar,

    }


    res, err := client.Get("https://www.verleihshop.de/login.html")

    checkError(err)


    doc, err := goquery.NewDocumentFromResponse(res)


    form := url.Values{}

    doc.Find("form[name='login'] input").Each(func(i int, s *goquery.Selection) {

        name, exist := s.Attr("name")

        if exist {

            value, exist := s.Attr("value")

            if exist {

                form.Add(name, value)

            }

        }


    })

    form.Set("my@mail.de", VerleihUsername)

    form.Set("mypass", VerleihPassword)


    req, _ := http.NewRequest("POST", "https://www.verleihshop.de/login.html", bytes.NewBufferString(form.Encode()))

    req.Header.Add("Content-Type", "application/x-www-form-urlencoded")


    res, err = client.Do(req)

    checkError(err)

    defer res.Body.Close()


    charResponse, _ := ioutil.ReadAll(res.Body)


    ioutil.WriteFile("response.html", charResponse, 0777)


    return nil

}


func main() {

    CheckThis("", "")

}
Okay habe hier mal einen Ansatz umgesetzt, Problem ist aber das er sich nicht einloggt und auch kein Error bzgl. Fehler des Logins bringt.

Jemand eine Idee?
 
#3
Code:
package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
    "net/http/cookiejar"
    "net/url"
    "log"
)

func checkError(err error) {
    if err != nil {
        log.Fatal(err)
    }
}

func CheckThis(string, string) error {
    cookieJar, _ := cookiejar.New(nil)

    client := &http.Client{
        Jar: cookieJar,
    }

    res, err := client.Get("https://www.url.de/login.html")
    checkError(err)

    data := url.Values{}
    data.Set("username", "user@xyz.com")
    data.Add("password", "ownpass)

    req, _ := http.NewRequest("POST", "https://www.url.de/login.html", strings.NewReader(data.Encode()))
    req.Header.Add("Content-Type", "application/x-www-form-urlencoded")

    res, err = client.Do(req)
    checkError(err)
    defer res.Body.Close()

    fmt.Println(res)

    charResponse, _ := ioutil.ReadAll(res.Body)
    ioutil.WriteFile("response.html", charResponse, 0777)

    return nil
}

func main() {
    CheckThis("", "")
}
So mit dem funktioniert es jetzt.

Falls mal jemand sucht, findet er nun hier die Antwort.
 
Gefällt mir: Mat
Oben