golang 模拟浏览器登录操作

package main

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

type MyTransport struct {
    Transport http.RoundTripper
}

func (t *MyTransport) transport() http.RoundTripper {
    if nil != t.Transport {
        return t.Transport
    }
    return http.DefaultTransport
}

func (t *MyTransport) RoundTrip(req *http.Request) (*http.Response, error) {
    req.Header.Set("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)")
    return t.transport().RoundTrip(req)
}

func NewClient() *http.Client {
    t := &MyTransport{}
    jar, err := cookiejar.New(nil)
    if nil != err {
        log.Fatal(err)
    }
    client := http.DefaultClient
    client.Transport = t
    client.Jar = jar
    return client
}

func main() {
    c := NewClient()

    // sUrl 是登录验证页面地址
    sUrl := "http://localhost/login"
    req, err := http.NewRequest("POST", sUrl, nil)
    // 执行登录操作
    res, err := c.Do(req)
    if nil != err {
        log.Fatal(err)
    }
    ioutil.ReadAll(res.Body)
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
by JeffreyBool blog :point_right: link
JeffreyBool
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!