|
|
@ -10,127 +10,130 @@ import ( |
|
|
|
"log" |
|
|
|
"net/http" |
|
|
|
"os" |
|
|
|
"path/filepath" |
|
|
|
"strconv" |
|
|
|
"time" |
|
|
|
) |
|
|
|
|
|
|
|
type User struct { |
|
|
|
client *httpc.HttpClient |
|
|
|
conf *goconfig.ConfigFile |
|
|
|
conf *goconfig.ConfigFile |
|
|
|
} |
|
|
|
|
|
|
|
func NewUser(client *httpc.HttpClient,conf *goconfig.ConfigFile) *User { |
|
|
|
return &User{client: client,conf:conf } |
|
|
|
func NewUser(client *httpc.HttpClient, conf *goconfig.ConfigFile) *User { |
|
|
|
return &User{client: client, conf: conf} |
|
|
|
} |
|
|
|
|
|
|
|
func (this *User) getUserAgent() string { |
|
|
|
return this.conf.MustValue("config","default_user_agent","") |
|
|
|
return this.conf.MustValue("config", "default_user_agent", "") |
|
|
|
} |
|
|
|
|
|
|
|
func (this *User) loginPage() { |
|
|
|
req:=httpc.NewRequest(this.client) |
|
|
|
req.SetHeader("User-Agent",this.getUserAgent()) |
|
|
|
req.SetHeader("Connection","keep-alive") |
|
|
|
req.SetHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3") |
|
|
|
_,_,_=req.SetUrl("https://passport.jd.com/new/login.aspx").SetMethod("get").Send().End() |
|
|
|
req := httpc.NewRequest(this.client) |
|
|
|
req.SetHeader("User-Agent", this.getUserAgent()) |
|
|
|
req.SetHeader("Connection", "keep-alive") |
|
|
|
req.SetHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3") |
|
|
|
_, _, _ = req.SetUrl("https://passport.jd.com/new/login.aspx").SetMethod("get").Send().End() |
|
|
|
} |
|
|
|
|
|
|
|
func (this *User) QrLogin() (string,error) { |
|
|
|
func (this *User) QrLogin() (string, error) { |
|
|
|
//登录页面
|
|
|
|
this.loginPage() |
|
|
|
//二维码登录
|
|
|
|
req:=httpc.NewRequest(this.client) |
|
|
|
req.SetHeader("User-Agent",this.getUserAgent()) |
|
|
|
req.SetHeader("Referer","https://passport.jd.com/new/login.aspx") |
|
|
|
resp,err:=req.SetUrl("https://qr.m.jd.com/show?appid=133&size=300&t="+strconv.Itoa(int(time.Now().Unix()*1000))).SetMethod("get").Send().EndFile("./","qr_code.png") |
|
|
|
if err!=nil || resp.StatusCode!=http.StatusOK { |
|
|
|
req := httpc.NewRequest(this.client) |
|
|
|
req.SetHeader("User-Agent", this.getUserAgent()) |
|
|
|
req.SetHeader("Referer", "https://passport.jd.com/new/login.aspx") |
|
|
|
resp, err := req.SetUrl("https://qr.m.jd.com/show?appid=133&size=300&t="+strconv.Itoa(int(time.Now().Unix()*1000))).SetMethod("get").Send().EndFile("./", "qr_code.png") |
|
|
|
if err != nil || resp.StatusCode != http.StatusOK { |
|
|
|
log.Println("获取二维码失败") |
|
|
|
return "",errors.New("获取二维码失败") |
|
|
|
return "", errors.New("获取二维码失败") |
|
|
|
} |
|
|
|
cookies:=resp.Cookies() |
|
|
|
wlfstkSmdl:="" |
|
|
|
for _,cookie:= range cookies { |
|
|
|
if cookie.Name=="wlfstk_smdl" { |
|
|
|
wlfstkSmdl=cookie.Value |
|
|
|
cookies := resp.Cookies() |
|
|
|
wlfstkSmdl := "" |
|
|
|
for _, cookie := range cookies { |
|
|
|
if cookie.Name == "wlfstk_smdl" { |
|
|
|
wlfstkSmdl = cookie.Value |
|
|
|
break |
|
|
|
} |
|
|
|
} |
|
|
|
log.Println("二维码获取成功,请打开京东APP扫描") |
|
|
|
dir,_:=os.Getwd() |
|
|
|
common.OpenImage(dir+"/qr_code.png") |
|
|
|
return wlfstkSmdl,nil |
|
|
|
dir, _ := os.Getwd() |
|
|
|
qrPath := filepath.Join(dir, `./qr_code.png`) |
|
|
|
common.OpenImage(qrPath) |
|
|
|
|
|
|
|
return wlfstkSmdl, nil |
|
|
|
} |
|
|
|
|
|
|
|
func (this *User) QrcodeTicket(wlfstkSmdl string) (string,error) { |
|
|
|
req:=httpc.NewRequest(this.client) |
|
|
|
req.SetHeader("User-Agent",this.getUserAgent()) |
|
|
|
req.SetHeader("Referer","https://passport.jd.com/new/login.aspx") |
|
|
|
resp,body,err:=req.SetUrl("https://qr.m.jd.com/check?appid=133&callback=jQuery"+strconv.Itoa(common.Rand(1000000,9999999))+"&token="+wlfstkSmdl+"&_="+strconv.Itoa(int(time.Now().Unix()*1000))).SetMethod("get").Send().End() |
|
|
|
if err!=nil || resp.StatusCode!=http.StatusOK { |
|
|
|
func (this *User) QrcodeTicket(wlfstkSmdl string) (string, error) { |
|
|
|
req := httpc.NewRequest(this.client) |
|
|
|
req.SetHeader("User-Agent", this.getUserAgent()) |
|
|
|
req.SetHeader("Referer", "https://passport.jd.com/new/login.aspx") |
|
|
|
resp, body, err := req.SetUrl("https://qr.m.jd.com/check?appid=133&callback=jQuery" + strconv.Itoa(common.Rand(1000000, 9999999)) + "&token=" + wlfstkSmdl + "&_=" + strconv.Itoa(int(time.Now().Unix()*1000))).SetMethod("get").Send().End() |
|
|
|
if err != nil || resp.StatusCode != http.StatusOK { |
|
|
|
log.Println("获取二维码扫描结果异常") |
|
|
|
return "",errors.New("获取二维码扫描结果异常") |
|
|
|
return "", errors.New("获取二维码扫描结果异常") |
|
|
|
} |
|
|
|
if gjson.Get(body,"code").Int()!=200 { |
|
|
|
log.Printf("Code: %s, Message: %s",gjson.Get(body,"code").String(),gjson.Get(body,"msg").String()) |
|
|
|
return "",errors.New(fmt.Sprintf("Code: %s, Message: %s",gjson.Get(body,"code").String(),gjson.Get(body,"msg").String())) |
|
|
|
if gjson.Get(body, "code").Int() != 200 { |
|
|
|
log.Printf("Code: %s, Message: %s", gjson.Get(body, "code").String(), gjson.Get(body, "msg").String()) |
|
|
|
return "", errors.New(fmt.Sprintf("Code: %s, Message: %s", gjson.Get(body, "code").String(), gjson.Get(body, "msg").String())) |
|
|
|
} |
|
|
|
log.Println("已完成手机客户端确认") |
|
|
|
return gjson.Get(body,"ticket").String(),nil |
|
|
|
return gjson.Get(body, "ticket").String(), nil |
|
|
|
} |
|
|
|
|
|
|
|
func (this *User) TicketInfo(ticket string) (string,error) { |
|
|
|
req:=httpc.NewRequest(this.client) |
|
|
|
req.SetHeader("User-Agent",this.getUserAgent()) |
|
|
|
req.SetHeader("Referer","https://passport.jd.com/uc/login?ltype=logout") |
|
|
|
resp,body,err:=req.SetUrl("https://passport.jd.com/uc/qrCodeTicketValidation?t="+ticket).SetMethod("get").Send().End() |
|
|
|
if err!=nil || resp.StatusCode!=http.StatusOK { |
|
|
|
func (this *User) TicketInfo(ticket string) (string, error) { |
|
|
|
req := httpc.NewRequest(this.client) |
|
|
|
req.SetHeader("User-Agent", this.getUserAgent()) |
|
|
|
req.SetHeader("Referer", "https://passport.jd.com/uc/login?ltype=logout") |
|
|
|
resp, body, err := req.SetUrl("https://passport.jd.com/uc/qrCodeTicketValidation?t=" + ticket).SetMethod("get").Send().End() |
|
|
|
if err != nil || resp.StatusCode != http.StatusOK { |
|
|
|
log.Println("二维码信息校验失败") |
|
|
|
return "",errors.New("二维码信息校验失败") |
|
|
|
return "", errors.New("二维码信息校验失败") |
|
|
|
} |
|
|
|
if gjson.Get(body,"returnCode").Int()==0 { |
|
|
|
if gjson.Get(body, "returnCode").Int() == 0 { |
|
|
|
log.Println("二维码信息校验成功") |
|
|
|
return "",nil |
|
|
|
}else{ |
|
|
|
return "", nil |
|
|
|
} else { |
|
|
|
log.Println("二维码信息校验失败") |
|
|
|
return "",errors.New("二维码信息校验失败") |
|
|
|
return "", errors.New("二维码信息校验失败") |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
func (this *User) RefreshStatus() error { |
|
|
|
client:=httpc.NewHttpClient() |
|
|
|
client := httpc.NewHttpClient() |
|
|
|
client.SetCookieJar(common.CookieJar) |
|
|
|
client.SetRedirect(func(req *http.Request, via []*http.Request) error { |
|
|
|
return http.ErrUseLastResponse |
|
|
|
}) |
|
|
|
req:=httpc.NewRequest(client) |
|
|
|
req.SetHeader("User-Agent",this.getUserAgent()) |
|
|
|
resp,_,err:=req.SetUrl("https://order.jd.com/center/list.action?rid="+strconv.Itoa(int(time.Now().Unix()*1000))).SetMethod("get").Send().End() |
|
|
|
if err==nil && resp.StatusCode==http.StatusOK { |
|
|
|
req := httpc.NewRequest(client) |
|
|
|
req.SetHeader("User-Agent", this.getUserAgent()) |
|
|
|
resp, _, err := req.SetUrl("https://order.jd.com/center/list.action?rid=" + strconv.Itoa(int(time.Now().Unix()*1000))).SetMethod("get").Send().End() |
|
|
|
if err == nil && resp.StatusCode == http.StatusOK { |
|
|
|
return nil |
|
|
|
}else{ |
|
|
|
} else { |
|
|
|
return errors.New("登录失效") |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
func (this *User) GetUserInfo() (string,error) { |
|
|
|
req:=httpc.NewRequest(this.client) |
|
|
|
req.SetHeader("User-Agent",this.getUserAgent()) |
|
|
|
req.SetHeader("Referer","https://order.jd.com/center/list.action") |
|
|
|
errorCount:=5 |
|
|
|
nickName:="" |
|
|
|
for { |
|
|
|
if errorCount>0 { |
|
|
|
_,body,_:=req.SetUrl("https://passport.jd.com/user/petName/getUserInfoForMiniJd.action?callback="+strconv.Itoa(common.Rand(1000000,9999999))+"&_="+strconv.Itoa(int(time.Now().Unix()*1000))).SetMethod("get").Send().End() |
|
|
|
if gjson.Get(body,"nickName").Exists() { |
|
|
|
nickName=gjson.Get(body,"nickName").String() |
|
|
|
func (this *User) GetUserInfo() (string, error) { |
|
|
|
req := httpc.NewRequest(this.client) |
|
|
|
req.SetHeader("User-Agent", this.getUserAgent()) |
|
|
|
req.SetHeader("Referer", "https://order.jd.com/center/list.action") |
|
|
|
errorCount := 5 |
|
|
|
nickName := "" |
|
|
|
for { |
|
|
|
if errorCount > 0 { |
|
|
|
_, body, _ := req.SetUrl("https://passport.jd.com/user/petName/getUserInfoForMiniJd.action?callback=" + strconv.Itoa(common.Rand(1000000, 9999999)) + "&_=" + strconv.Itoa(int(time.Now().Unix()*1000))).SetMethod("get").Send().End() |
|
|
|
if gjson.Get(body, "nickName").Exists() { |
|
|
|
nickName = gjson.Get(body, "nickName").String() |
|
|
|
break |
|
|
|
} |
|
|
|
errorCount=errorCount-1 |
|
|
|
time.Sleep(300*time.Millisecond) |
|
|
|
}else{ |
|
|
|
errorCount = errorCount - 1 |
|
|
|
time.Sleep(300 * time.Millisecond) |
|
|
|
} else { |
|
|
|
break |
|
|
|
} |
|
|
|
} |
|
|
|
b,_:=common.GbkToUtf8([]byte(nickName)) |
|
|
|
b, _ := common.GbkToUtf8([]byte(nickName)) |
|
|
|
return string(b), nil |
|
|
|
} |
|
|
|
} |
|
|
|