package proxy import ( "bytes" "io" "net/http" "github.com/sirupsen/logrus" "gopkg.in/elazarl/goproxy.v1" ) type Follower struct { Extra struct { FatalItemIds []any `json:"fatal_item_ids"` Logid string `json:"logid"` Now int64 `json:"now"` } `json:"extra"` Followers []struct { AvatarThumb struct { Height int `json:"height"` URI string `json:"uri"` URLList []string `json:"url_list"` Width int `json:"width"` } `json:"avatar_thumb"` Nickname string `json:"nickname"` SecUID string `json:"sec_uid"` ShortID string `json:"short_id"` UID string `json:"uid"` UniqueID string `json:"unique_id"` UniqueIDModifyTime int `json:"unique_id_modify_time"` } `json:"followers"` HasMore bool `json:"has_more"` MyselfUserID string `json:"myself_user_id"` Offset int `json:"offset"` RecHasMore bool `json:"rec_has_more"` StatusCode int `json:"status_code"` StorePage string `json:"store_page"` Total int `json:"total"` VcdCount int `json:"vcd_count"` } func WithFollower() Option { return func(p *Proxy) { p.proxy.OnResponse().DoFunc(func(resp *http.Response, ctx *goproxy.ProxyCtx) *http.Response { if resp.StatusCode != 200 { return resp } if resp.Request.Host != "www.douyin.com" { return resp } if resp.Request.URL.Path != "/aweme/v1/web/user/follower/list/" { return resp } body, err := io.ReadAll(resp.Body) if err != nil { logrus.Error(err) return resp } resp.Body.Close() resp.Body = io.NopCloser(bytes.NewReader(body)) go p.processFollowers(body) return resp }) } }