package jd_seckill
import (
"encoding/json"
"errors"
"github.com/Albert-Zhan/httpc"
"github.com/ztino/jd_seckill/common"
"github.com/ztino/jd_seckill/log"
"io/ioutil"
"net/http"
"net/url"
"os"
)
type Session struct {
cookieJar * httpc . CookieJar
}
func NewSession ( cookieJar * httpc . CookieJar ) * Session {
return & Session { cookieJar : cookieJar }
}
func ( this * Session ) SaveCookieToFile ( path string ) error {
u , _ := url . Parse ( "https://jd.com" )
cookies := this . cookieJar . Cookies ( u )
if len ( cookies ) == 0 {
log . Println ( "保存cookie失败,未找到相关cookie" )
return errors . New ( "保存cookie失败,未找到相关cookie" )
}
data , _ := json . Marshal ( cookies )
err := ioutil . WriteFile ( path , data , 0777 )
if err != nil {
log . Println ( "保存cookie失败,错误信息:" + err . Error ( ) )
return errors . New ( "保存cookie失败,错误信息:" + err . Error ( ) )
}
log . Println ( "保存cookie成功" )
return nil
}
func ( this * Session ) LoadCookieToJar ( path string ) error {
if ! common . Exists ( path ) {
log . Println ( "cookie文件不存在" )
return errors . New ( "cookie文件不存在" )
}
data , err := ioutil . ReadFile ( path )
if err != nil {
log . Println ( "读取cookie失败,错误信息:" + err . Error ( ) )
return errors . New ( "读取cookie失败,错误信息:" + err . Error ( ) )
}
var cookies [ ] * http . Cookie
err = json . Unmarshal ( data , & cookies )
if err != nil {
log . Println ( "解析cookie失败,错误信息:" + err . Error ( ) )
return errors . New ( "解析cookie失败,错误信息:" + err . Error ( ) )
}
u , _ := url . Parse ( "https://jd.com" )
this . cookieJar . SetCookies ( u , cookies )
log . Println ( "加载cookie成功" )
return nil
}
func ( this * Session ) CheckLoginStatus ( ) error {
err := this . LoadCookieToJar ( "./cookie.txt" )
if err != nil {
return err
}
//检测cookie会话状态
user := NewUser ( common . Client , common . Config )
if status := user . RefreshStatus ( ) ; status != nil {
_ = os . Remove ( "./cookie.txt" )
return errors . New ( "登录失效,请重新登录" )
}
return nil
}