kaakaa Blog

この世は極楽 空にはとんぼ

ログインフォームを使ってログインするようなページへのアクセ

Go-lang勉強。

ログインフォームのあるようなサイトにGo-langのhttpパッケージを使ってログインする。

ログインしたいのは Log in - Swipe

フォームの情報送るにはPostForm使うと楽っぽいけど、今回は

  • リファラを設定しないとログインさせてくれない
  • cookieJar使ってログイン情報持ち回りたい

という背景があったので、PostFormだと上記が満たせない感じ。

なので、Request作ってフォームの情報はbodyに流し込む下記のような方法で。

package main

import (
        "net/http"
        "net/http/cookiejar"
        "io/ioutil"
        "bytes"
)

func main() {
        cookieJar, _ := cookiejar.New(nil)

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

        // Login to swipe.to
        var str = []byte("Email=hogehoge%40example.com&Password=foobar")
        req, _ := http.NewRequest("POST", "https://www.swipe.to/login", bytes.NewBuffer(str))
        req.Header.Set("Referer", "https://www.swipe.to/home")
        req.Header.Set("Content-Type", "application/x-www-form-urlencoded")

        res, _ := client.Do(req)

        // Create New Doc
        req2, _ := http.NewRequest("POST", "https://www.swipe.to/edit/create", nil)
        req2.Header.Set("Referer", "https://www.swipe.to/home")
        res2, _ := client.Do(req2)
        body, _ := ioutil.ReadAll(res2.Body)
        defer res2.Body.Close()

        println(string(body))
}

なんか勘違いしてる感が拭えない。