package main import ( "bytes" "encoding/json" "fmt" "log" "net/http" "net/http/cookiejar" "net/http/httputil" "os" "time" ) type username struct { Email string `json:"username"` } type signin struct { Email string `json:"username"` Password string `json:"password"` Student int `json:"student"` } var client http.Client func init() { jar, err := cookiejar.New(nil) if err != nil { log.Fatalf("Got error while creating cookie jar %s", err.Error()) } client = http.Client{ Jar: jar, Timeout: time.Second * 10, } } func callGet(url string) error { method := "GET" req, err := http.NewRequest(method, url, nil) if err != nil { return fmt.Errorf("Got error %s", err.Error()) } req.Header.Set("user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:96.0) Gecko/20100101 Firefox/96.0") res, err := client.Do(req) if err != nil { return fmt.Errorf("Got error %s", err.Error()) } defer res.Body.Close() /* fmt.Printf("=====\n\nStatuscode: %s %d\n========\n\n", url, res.StatusCode) body, err := ioutil.ReadAll(res.Body) if err != nil { log.Fatal(err) } fmt.Println(string(body)) fmt.Printf("=====\n\n") for name, values := range res.Header { // Loop over all values for the name. for _, value := range values { fmt.Println(name, value) } } */ dump, err := httputil.DumpRequestOut(req, true) if err != nil { log.Fatal(err) } fmt.Printf("%q", dump) return nil } func callPost(url string, payload []byte) error { method := "POST" req, err := http.NewRequest(method, url, bytes.NewBuffer(payload)) if err != nil { return fmt.Errorf("Got error %s", err.Error()) } // assume all POST is JSON req.Header.Set("content-type", "application/json; charset=UTF-8") req.Header.Set("user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:96.0) Gecko/20100101 Firefox/96.0") dump, err := httputil.DumpRequestOut(req, true) res, err := client.Do(req) if err != nil { return fmt.Errorf("Got error %s", err.Error()) } defer res.Body.Close() /* fmt.Printf("=====\n\nStatuscode: %s %d\n========\n\n", url, res.StatusCode) body, err := ioutil.ReadAll(res.Body) if err != nil { log.Fatal(err) } fmt.Println(string(body)) fmt.Printf("=====\n\n") for name, values := range res.Header { // Loop over all values for the name. for _, value := range values { fmt.Println(name, value) } } */ fmt.Printf("=DumpRequestOut====\n\n") if err != nil { log.Fatal(err) } fmt.Printf("%s", dump) return nil } func toutmonlogin(schoolid string, email string, password string) { // get all cookie first loginUrl := "https://www.toutemonannee.com/connect" callGet(loginUrl) // email-username emailUrl := "https://www.toutemonannee.com/connect/check-email-username" emailPayload := username{ Email: email, } jsonEmailPayload, err := json.Marshal(emailPayload) if err != nil { log.Fatal(err) } callPost(emailUrl, jsonEmailPayload) // signin signinUrl := "https://www.toutemonannee.com/connect/signin" signinPayload := signin{ Email: email, Password: password, Student: 0, } jsonSigninPayload, err := json.Marshal(signinPayload) if err != nil { log.Fatal(err) } callPost(signinUrl, jsonSigninPayload) // get json blogposturl := "https://www.toutemonannee.com/journal/" + schoolid + "/posts/list?page=1&publishedDateOrder=1" callGet(blogposturl) } func main() { schoolid, ok := os.LookupEnv("TOUTMONENFANTID") email := os.LookupEnv("TOUTMONENFANTEMAIL") password := os.LookupEnv("TOUTMONENFANTPASSWORD") if ok { toutmonlogin(schoolid, email, password) } else { fmt.Printf("TOUTMONENFANTID var is undefined") } }