secure only expiration cookie http-post go cookiejar

http-post - expiration - httponly cookie javascript



Ir a HTTP Publicar y utilizar cookies (4)

En la versión 1.5 de Go, podemos usar http.NewRequest para realizar una solicitud de publicación con cookie.

package main import "fmt" import "net/http" import "io/ioutil" import "strings" func main() { // Declare http client client := &http.Client{} // Declare post data PostData := strings.NewReader("useId=5&age=12") // Declare HTTP Method and Url req, err := http.NewRequest("POST", "http://localhost/", PostData) // Set cookie req.Header.Set("Cookie", "name=xxxx; count=x") resp, err := client.Do(req) // Read response data, err := ioutil.ReadAll(resp.Body) // error handle if err != nil { fmt.Printf("error = %s /n", err); } // Print response fmt.Printf("Response = %s", string(data)); }

Estoy intentando usar Ir para iniciar sesión en un sitio web y almacenar las cookies para su uso posterior.

¿Podría dar un código de ejemplo para publicar un formulario, almacenar las cookies y acceder a otra página utilizando las cookies?

Creo que podría necesitar hacer un Cliente para almacenar las cookies, estudiando http://gotour.golang.org/src/pkg/net/http/client.go

package main import ("net/http" "log" "net/url" ) func Login(user, password string) string { postUrl := "http://www.pge.com/eum/login" // Set up Login values := make(url.Values) values.Set("user", user) values.Set("password", password) // Submit form resp, err := http.PostForm(postUrl, values) if err != nil { log.Fatal(err) } defer resp.Body.Close() // How do I store cookies? return "Hello" } func ViewBill(url string, cookies) string { //What do I put here? }


Go 1.1 introdujo una implementación de cookie jar net/http/cookiejar .

import ( "net/http" "net/http/cookiejar" ) cookieJar, _ := cookiejar.New(nil) client := &http.Client{ Jar: cookieJar, }


Otra forma de hacerlo. Trabaja en Go 1.8.

expiration := time.Now().Add(5 * time.Minute) cookie := http.Cookie{Name: "myCookie", Value: "Hello World", Expires: expiration} http.SetCookie(w, &cookie)


Primero necesitarás implementar la interfaz http.CookieJar . Luego puede pasar esto al cliente que cree y se utilizará para las solicitudes realizadas con el cliente. Como ejemplo básico:

package main import ( "fmt" "net/http" "net/url" "io/ioutil" "sync" ) type Jar struct { lk sync.Mutex cookies map[string][]*http.Cookie } func NewJar() *Jar { jar := new(Jar) jar.cookies = make(map[string][]*http.Cookie) return jar } // SetCookies handles the receipt of the cookies in a reply for the // given URL. It may or may not choose to save the cookies, depending // on the jar''s policy and implementation. func (jar *Jar) SetCookies(u *url.URL, cookies []*http.Cookie) { jar.lk.Lock() jar.cookies[u.Host] = cookies jar.lk.Unlock() } // Cookies returns the cookies to send in a request for the given URL. // It is up to the implementation to honor the standard cookie use // restrictions such as in RFC 6265. func (jar *Jar) Cookies(u *url.URL) []*http.Cookie { return jar.cookies[u.Host] } func main() { jar := NewJar() client := http.Client{nil, nil, jar} resp, _ := client.PostForm("http://www.somesite.com/login", url.Values{ "email": {"myemail"}, "password": {"mypass"}, }) resp.Body.Close() resp, _ = client.Get("http://www.somesite.com/protected") b, _ := ioutil.ReadAll(resp.Body) resp.Body.Close() fmt.Println(string(b)) }