やったこと
pythonでqiitaにログインして見たという趣旨の記事を見ました。
qiitaのログインページを見たところ、記事執筆時と変わらないようだったので、golang版で適当にコードを書いて見ました。
しかし、帰ってきたhtmlコードを見ると、500 internal errorが発生しているようです。
なぜでしょう...
該当のコード
go
1package main 2 3import ( 4 "github.com/PuerkitoBio/goquery" 5 "net/http" 6 "net/url" 7 "strings" 8 "fmt" 9 "io/ioutil" 10 "net/http/cookiejar" 11) 12 13func main() { 14 //cookieを保持してログインする 15 jar, err := cookiejar.New(nil) 16 if err != nil { 17 // 18 } 19 20 client := http.Client{Jar: jar} 21 22 v := findAuthToken() 23 24 values := url.Values{} 25 values.Set("utf8", "✓") 26 values.Set("identity", "ユーザーネーム") 27 values.Set("password", "パスワード") 28 values.Set("authenticity_token", v) 29 30 req, err := http.NewRequest("POST", "https://qiita.com/login", strings.NewReader(values.Encode())) 31 if err != nil { 32 fmt.Println(err) 33 return 34 } 35 36 req.Header.Add("Content-Type", "application/x-www-form-urlencoded") 37 resp, err := client.Do(req) 38 39 defer resp.Body.Close() 40 body, _ := ioutil.ReadAll(resp.Body) 41 fmt.Println(string(body)) 42} 43 44//トークンを探す関数 45func findAuthToken() string { 46 doc, err := goquery.NewDocument("https://qiita.com/login") 47 if err != nil { 48 fmt.Print("url scarapping failed") 49 } 50 result := doc.Find("input").Next() 51 val, _ := result.Attr("value") 52 return val 53}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。