Commit 5b15f433 authored by 王明明's avatar 王明明

vy 转换完成

parent b4001da5
......@@ -2,24 +2,25 @@ module test
go 1.20
require (
github.com/PuerkitoBio/goquery v1.8.1
github.com/antonfisher/nested-logrus-formatter v1.3.1
github.com/bogdanfinn/fhttp v0.5.18
github.com/bogdanfinn/tls-client v1.3.6
github.com/gorilla/mux v1.8.0
github.com/sirupsen/logrus v1.9.0
gopkg.in/natefinch/lumberjack.v2 v2.2.1
)
require (
github.com/andybalholm/brotli v1.0.4 // indirect
github.com/antonfisher/nested-logrus-formatter v1.3.1 // indirect
github.com/bogdanfinn/fhttp v0.5.18 // indirect
github.com/bogdanfinn/tls-client v1.3.6 // indirect
github.com/andybalholm/cascadia v1.3.1 // indirect
github.com/bogdanfinn/utls v1.5.14 // indirect
github.com/google/uuid v1.3.0 // indirect
github.com/gorilla/mux v1.8.0 // indirect
github.com/imroc/biu v0.0.0-20170329141542-0376ce6761c0 // indirect
github.com/klauspost/compress v1.15.12 // indirect
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible // indirect
github.com/lestrrat-go/strftime v1.0.6 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/sirupsen/logrus v1.9.0 // indirect
github.com/tam7t/hpkp v0.0.0-20160821193359-2b70b4024ed5 // indirect
golang.org/x/crypto v0.1.0 // indirect
golang.org/x/net v0.1.0 // indirect
golang.org/x/sys v0.1.0 // indirect
golang.org/x/term v0.1.0 // indirect
golang.org/x/text v0.4.0 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
golang.org/x/net v0.7.0 // indirect
golang.org/x/sys v0.5.0 // indirect
golang.org/x/text v0.7.0 // indirect
)
github.com/PuerkitoBio/goquery v1.8.1 h1:uQxhNlArOIdbrH1tr0UXwdVFgDcZDrZVdcpygAcwmWM=
github.com/PuerkitoBio/goquery v1.8.1/go.mod h1:Q8ICL1kNUJ2sXGoAhPGUdYDJvgQgHzJsnnd3H7Ho5jQ=
github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY=
github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c=
github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA=
github.com/antonfisher/nested-logrus-formatter v1.3.1 h1:NFJIr+pzwv5QLHTPyKz9UMEoHck02Q9L0FP13b/xSbQ=
github.com/antonfisher/nested-logrus-formatter v1.3.1/go.mod h1:6WTfyWFkBc9+zyBaKIqRrg/KwMqBbodBjgbHjDz7zjA=
github.com/bogdanfinn/fhttp v0.5.18 h1:n3lnt5huD9Z35I5gXJCBLiJJo8JMckb0Z05Nqnh+tIQ=
......@@ -11,40 +15,57 @@ github.com/bogdanfinn/utls v1.5.14/go.mod h1:mHeRCi69cUiEyVBkKONB1cAbLjRcZnlJbGz
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
github.com/imroc/biu v0.0.0-20170329141542-0376ce6761c0 h1:pkyNAS9IQiZgseFrdhZC4cloBo2k2O2Son/k+3NquwY=
github.com/imroc/biu v0.0.0-20170329141542-0376ce6761c0/go.mod h1:wscexmyH+oDXfQr1q8PAZUXfKnxCUcNm62D/M5Ec8Lw=
github.com/klauspost/compress v1.15.12 h1:YClS/PImqYbn+UILDnqxQCZ3RehC9N318SU3kElDUEM=
github.com/klauspost/compress v1.15.12/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
github.com/lestrrat-go/strftime v1.0.6 h1:CFGsDEt1pOpFNU+TJB0nhz9jl+K0hZSLE205AhTIGQQ=
github.com/lestrrat-go/strftime v1.0.6/go.mod h1:f7jQKgV5nnJpYgdEasS+/y7EsTb8ykN2z68n3TtcTaw=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
github.com/tam7t/hpkp v0.0.0-20160821193359-2b70b4024ed5 h1:YqAladjX7xpA6BM04leXMWAEjS0mTZ5kUU9KRBriQJc=
github.com/tam7t/hpkp v0.0.0-20160821193359-2b70b4024ed5/go.mod h1:2JjD2zLQYH5HO74y5+aE3remJQvl6q4Sn6aWA2wD1Ng=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU=
golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
golang.org/x/net v0.1.0 h1:hZ/3BUoy5aId7sCpA/Tc5lt8DkFgdVS2onTpJsZ/fl0=
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g=
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.1.0 h1:g6Z6vPFA9dYBAF7DWcH6sCcOntplXsDKcliusYijMlw=
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
......
package model
import (
"encoding/json"
"errors"
"fmt"
"github.com/PuerkitoBio/goquery"
http "github.com/bogdanfinn/fhttp"
tls_client "github.com/bogdanfinn/tls-client"
"github.com/sirupsen/logrus"
"io"
"log"
"net/url"
"strings"
"test/sensor"
"time"
)
type AkmClient struct {
Jar tls_client.CookieJar
Client tls_client.HttpClient
SensorUrl string
initUrl string
postUrl string
logger *logrus.Entry
ua string
}
func (akm *AkmClient) init() error {
startTime := time.Now()
req, err := http.NewRequest(http.MethodGet, akm.initUrl, nil)
//req, err := http.NewRequest(http.MethodGet, "https://www.easyjet.com/ejavailability/api/v66/availability/query?AdditionalSeats=0&AdultSeats=1&ArrivalIata=LGW&ChildSeats=0&DepartureIata=BFS&IncludeAdminFees=true&IncludeFlexiFares=false&IncludeLowestFareSeats=true&IncludePrices=true&Infants=0&IsTransfer=false&LanguageCode=EN&MaxDepartureDate=2023-03-20&MinDepartureDate=2023-03-18", nil)
if err != nil {
akm.logger.WithError(err).Errorln("初始化abck请求失败")
return err
}
req.Header = http.Header{
"accept": {"*/*"},
"accept-language": {"de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7"},
"user-agent": {akm.ua},
http.HeaderOrderKey: {
"accept",
"accept-language",
"user-agent",
},
}
resp, err := akm.Client.Do(req)
if err != nil {
akm.logger.WithError(err).Errorln("abck请求失败")
return err
}
defer resp.Body.Close()
uri, _ := url.Parse(akm.initUrl)
doc, err := goquery.NewDocumentFromReader(resp.Body)
if err != nil {
akm.logger.WithError(err).Info("解析html出错")
return err
}
scripts := doc.Find("script")
sensorurl, ok := scripts.Last().Attr("src")
if ok {
akm.SensorUrl = fmt.Sprintf("%s://%s%s", uri.Scheme, uri.Host, sensorurl)
//reg, _ := regexp.Compile("</noscript><script type=\"text/javascript\" src=\"(.+?)\"></s")
//matchs := reg.FindStringSubmatch(string(readBytes))
//
//if len(matchs) == 2 {
// akm.SensorUrl = fmt.Sprintf("%s://%s%s", uri.Scheme, uri.Host, matchs[1])
} else {
akm.logger.Errorln("提取不到sensorUrl失败")
return errors.New("提取不到sensorUrl 失败")
}
akm.logger.Info("请求sensor url:", akm.SensorUrl)
akm.logger.Info("初始化abck 耗时", time.Since(startTime).String())
return nil
}
func NewAkmClient(initUrl, postUrl, proxyUrl string, logger *logrus.Entry) *AkmClient {
jar := tls_client.NewCookieJar()
options := []tls_client.HttpClientOption{
tls_client.WithTimeoutSeconds(30),
tls_client.WithClientProfile(tls_client.Chrome_110),
tls_client.WithNotFollowRedirects(),
tls_client.WithCookieJar(jar), // create cookieJar instance and pass it as argument
//tls_client.WithProxyUrl("http://user:pass@host:port"),
//tls_client.WithInsecureSkipVerify(),
}
client, err := tls_client.NewHttpClient(tls_client.NewNoopLogger(), options...)
if err != nil {
log.Println(err)
}
//client.SetProxy("http://user-unifflcc-region-us:q39CEBTs5A5YQXor@pr.roxlabs.cn:4600")
if proxyUrl == "" {
client.SetProxy("http://127.0.0.1:8890")
} else {
client.SetProxy(proxyUrl)
}
return &AkmClient{Jar: jar, Client: client, initUrl: initUrl, postUrl: postUrl, logger: logger}
}
func (akm *AkmClient) GetCookie() (string, string) {
uri, _ := url.Parse(akm.initUrl)
cookies := akm.Jar.Cookies(uri)
abck := ""
bmsz := ""
for _, v := range cookies {
if v.Name == "_abck" {
abck = v.Value
}
if v.Name == "bm_sz" {
bmsz = v.Value
}
}
return abck, bmsz
}
func (akm *AkmClient) GetAllCookie() map[string]string {
res := make(map[string]string)
uri, _ := url.Parse(akm.initUrl)
cookies := akm.Jar.Cookies(uri)
for _, v := range cookies {
res[v.Name] = v.Value
}
return res
}
func (akm *AkmClient) postSensor(times int) error {
abck, bmsz := akm.GetCookie()
t1 := time.Now()
res := sensor.GenData(times, abck, bmsz, akm.ua, akm.postUrl)
t2 := time.Now()
sensor_data := "{\"sensor_data\":\"" + res + "\"}"
statusCode, err := akm.PostJson(times, akm.SensorUrl, sensor_data)
if err != nil {
return err
}
akm.logger.Info("第", times, "生成一次 abck 耗时 ", t2.Sub(t1).String(), " 响应abck结果 ", statusCode, " 请求耗时 ", time.Since(t2).String())
return nil
}
func (akm *AkmClient) PostJson(times int, url, data string) (int, error) {
req, err := http.NewRequest(http.MethodPost, url, strings.NewReader(data))
//req, err := http.NewRequest(http.MethodGet, "https://www.easyjet.com/ejavailability/api/v66/availability/query?AdditionalSeats=0&AdultSeats=1&ArrivalIata=LGW&ChildSeats=0&DepartureIata=BFS&IncludeAdminFees=true&IncludeFlexiFares=false&IncludeLowestFareSeats=true&IncludePrices=true&Infants=0&IsTransfer=false&LanguageCode=EN&MaxDepartureDate=2023-03-20&MinDepartureDate=2023-03-18", nil)
if err != nil {
akm.logger.WithError(err).Errorln("初始化abck请求失败")
return -1, err
}
req.Header = http.Header{
"accept": {"*/*"},
"accept-language": {"de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7"},
"content-type": {"application/json"},
"user-agent": {akm.ua},
http.HeaderOrderKey: {
"accept",
"accept-language",
"user-agent",
},
}
for i := 0; i < 1; i++ {
//startTime := time.Now()
response, err := akm.Client.Do(req)
if err != nil {
akm.logger.WithError(err).Info("post sensor_data 错误")
continue
}
defer response.Body.Close()
readAll, err := io.ReadAll(response.Body)
if err != nil {
akm.logger.WithError(err).Info("post sensor_data 读取返回值 错误")
continue
}
resJson := make(map[string]bool)
err = json.Unmarshal(readAll, &resJson)
if err != nil {
akm.logger.WithError(err).Info("序列化 sensor_data 返回值 错误")
continue
}
//akm.logger.Infof("第%d次snesor请求第%d次尝试结果%v 耗时 %s", times, i, resJson["success"], time.Since(startTime).String())
return response.StatusCode, nil
}
return -1, errors.New("请求三次都失败返回结果吧")
}
package model
import (
"encoding/json"
"errors"
http "github.com/bogdanfinn/fhttp"
tls_client "github.com/bogdanfinn/tls-client"
"github.com/sirupsen/logrus"
"io"
"log"
"net/url"
"regexp"
"strings"
"test/sensor"
"time"
)
type AkmClient struct {
Jar tls_client.CookieJar
Client tls_client.HttpClient
SensorUrl string
uri string
logger *logrus.Entry
}
func NewAkmClient(initUrl, postUrl, proxyUrl string, logger *logrus.Entry) *AkmClient {
jar := tls_client.NewCookieJar()
options := []tls_client.HttpClientOption{
tls_client.WithTimeoutSeconds(30),
tls_client.WithClientProfile(tls_client.Chrome_110),
tls_client.WithNotFollowRedirects(),
tls_client.WithCookieJar(jar), // create cookieJar instance and pass it as argument
//tls_client.WithProxyUrl("http://user:pass@host:port"),
//tls_client.WithInsecureSkipVerify(),
}
client, err := tls_client.NewHttpClient(tls_client.NewNoopLogger(), options...)
if err != nil {
log.Println(err)
}
//client.SetProxy("http://user-unifflcc-region-us:q39CEBTs5A5YQXor@pr.roxlabs.cn:4600")
if proxyUrl == "" {
client.SetProxy("http://127.0.0.1:8890")
} else {
client.SetProxy(proxyUrl)
}
return &AkmClient{Jar: jar, Client: client, uri: "https://www.easyjet.com/en", logger: logger}
}
func (c *AkmClient) PostJson(times int, url, data string) (int, error) {
req, err := http.NewRequest(http.MethodPost, url, strings.NewReader(data))
//req, err := http.NewRequest(http.MethodGet, "https://www.easyjet.com/ejavailability/api/v66/availability/query?AdditionalSeats=0&AdultSeats=1&ArrivalIata=LGW&ChildSeats=0&DepartureIata=BFS&IncludeAdminFees=true&IncludeFlexiFares=false&IncludeLowestFareSeats=true&IncludePrices=true&Infants=0&IsTransfer=false&LanguageCode=EN&MaxDepartureDate=2023-03-20&MinDepartureDate=2023-03-18", nil)
if err != nil {
c.logger.WithError(err).Errorln("初始化abck请求失败")
return -1, err
}
req.Header = http.Header{
"accept": {"*/*"},
"accept-language": {"de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7"},
"content-type": {"application/json"},
"user-agent": {"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36"},
http.HeaderOrderKey: {
"accept",
"accept-language",
"user-agent",
},
}
for i := 0; i < 1; i++ {
startTime := time.Now()
response, err := c.Client.Do(req)
if err != nil {
c.logger.WithError(err).Info("post sensor_data 错误")
continue
}
defer response.Body.Close()
readAll, err := io.ReadAll(response.Body)
if err != nil {
c.logger.WithError(err).Info("post sensor_data 读取返回值 错误")
continue
}
resJson := make(map[string]bool)
err = json.Unmarshal(readAll, &resJson)
if err != nil {
c.logger.WithError(err).Info("序列化 sensor_data 返回值 错误")
continue
}
c.logger.Infof("第%d次snesor请求第%d次尝试结果%v 耗时 %s", times, i, resJson["success"], time.Since(startTime).String())
return response.StatusCode, nil
}
return -1, errors.New("请求三次都失败返回结果吧")
}
func (c *AkmClient) GetAbck(times int, urlInput string) error {
abck, bmsz := c.GetCookie()
//data := url.Values{}
//data.Set("times", strconv.Itoa(times))
//data.Set("abck", abck)
//data.Set("bm_sz", bmsz)
//data.Set("url", urlInput)
//'url': 'https://www.easyjet.com/en/buy/flights?isOneWay=on&pid=www.easyjet.com'
//resp, err := http.PostForm("http://127.0.0.1:3033/akm2t", data)
//defer resp.Body.Close()
//if err != nil {
// log.Println(err)
//}
//res, _ := io.ReadAll(resp.Body)
ua := "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.50"
t1 := time.Now()
res := sensor.GenData(abck, bmsz, ua, urlInput)
c.logger.Info("生成一次 abck 耗时", time.Since(t1).String())
t1 = time.Now()
sensor_data := "{\"sensor_data\":\"" + string(res) + "\"}"
//akmRes, err := c.Client.Post("https://www.easyjet.com"+c.SensorUrl, "application/json", strings.NewReader(sensor_data))
statusCode, err := c.PostJson(times, "https://www.easyjet.com"+c.SensorUrl, sensor_data)
if err != nil {
return err
}
c.logger.Info("第", times, "响应abck结果", statusCode, "请求耗时", time.Since(t1).String())
//defer akmRes.Body.Close()
return nil
}
func (c *AkmClient) GetCookie() (string, string) {
uri, _ := url.Parse("https://www.easyjet.com/en")
cookies := c.Jar.Cookies(uri)
abck := ""
bmsz := ""
for _, v := range cookies {
if v.Name == "_abck" {
abck = v.Value
}
if v.Name == "bm_sz" {
bmsz = v.Value
}
}
return abck, bmsz
}
func (c *AkmClient) init() error {
startTime := time.Now()
req, err := http.NewRequest(http.MethodGet, c.uri, nil)
//req, err := http.NewRequest(http.MethodGet, "https://www.easyjet.com/ejavailability/api/v66/availability/query?AdditionalSeats=0&AdultSeats=1&ArrivalIata=LGW&ChildSeats=0&DepartureIata=BFS&IncludeAdminFees=true&IncludeFlexiFares=false&IncludeLowestFareSeats=true&IncludePrices=true&Infants=0&IsTransfer=false&LanguageCode=EN&MaxDepartureDate=2023-03-20&MinDepartureDate=2023-03-18", nil)
if err != nil {
c.logger.WithError(err).Errorln("初始化abck请求失败")
return err
}
req.Header = http.Header{
"accept": {"*/*"},
"accept-language": {"de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7"},
"user-agent": {"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36"},
http.HeaderOrderKey: {
"accept",
"accept-language",
"user-agent",
},
}
resp, err := c.Client.Do(req)
if err != nil {
c.logger.WithError(err).Errorln("abck请求失败")
return err
}
defer resp.Body.Close()
readBytes, _ := io.ReadAll(resp.Body)
reg, _ := regexp.Compile("</noscript><script type=\"text/javascript\" src=\"(.+?)\"></s")
matchs := reg.FindStringSubmatch(string(readBytes))
if len(matchs) == 2 {
c.SensorUrl = matchs[1]
} else {
c.logger.Errorln("提取不到sensorUrl失败")
}
c.logger.Info("初始化abck 耗时", time.Since(startTime).String())
return nil
}
func EasyJet(carrierType, proxyUrl string) *Akm {
func EasyJet(carrierType, proxyUrl string) (*Akm, error) {
logger := logrus.WithField("typoe", carrierType)
logger.Info("使用代理", proxyUrl)
akmClient := NewAkmClient(U2Url, U2Url, proxyUrl, logger)
akmClient.init()
logger.Info("请求sensor url:", akmClient.SensorUrl)
if akmClient.SensorUrl == "" {
logger.Info("sensorUrl 初始化失败")
return nil
akmClient := NewAkmClient(U2Url, U2PostUrl, proxyUrl, logger)
akmClient.ua = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.50"
err := akmClient.init()
if err != nil {
return nil, err
}
for i := 0; i < 3; i++ {
err := akmClient.GetAbck(i, "https://www.easyjet.com/en/buy/flights?isOneWay=on&pid=www.easyjet.com")
err := akmClient.postSensor(i)
if err != nil {
logger.WithError(err).Errorln("请求失败")
return nil
akmClient.logger.WithError(err).Errorln("请求失败")
return nil, err
}
}
akm := &Akm{
Cookies: akmClient.GetAllCookie(),
Ua: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.50",
Ua: akmClient.ua,
}
//query()
return akm
}
func (c *AkmClient) GetAllCookie() map[string]string {
res := make(map[string]string)
uri, _ := url.Parse("https://www.easyjet.com/en")
cookies := c.Jar.Cookies(uri)
for _, v := range cookies {
res[v.Name] = v.Value
return akm, nil
}
return res
}
......@@ -9,7 +9,7 @@ import (
"time"
)
func routeToU2(w http.ResponseWriter, r *http.Request) {
func routeAkm(w http.ResponseWriter, r *http.Request) {
t1 := time.Now()
data := util.GetPostJson(r)
logrus.Info("请求一次", data)
......@@ -20,18 +20,21 @@ func routeToU2(w http.ResponseWriter, r *http.Request) {
carrierType := data["type"]
var akm *Akm
var akmErr error
switch strings.ToUpper(carrierType) {
case "U2":
akm = EasyJet(carrierType, data["proxy"])
akm, akmErr = EasyJet(carrierType, data["proxy"])
case "VY":
akm, akmErr = VueLing(carrierType, data["proxy"])
default:
util.WriteJson(w, util.ErrorJson("不支持的航司"))
return
}
logrus.Info("请求结束 耗时", time.Since(t1).String())
if akm == nil {
if akmErr != nil {
util.WriteJson(w, &util.Response{
Code: 500,
Message: "请求超时",
Message: akmErr.Error(),
})
return
}
......@@ -59,5 +62,5 @@ func checkPostRequire(data map[string]string) bool {
}
func InitRouter(r *mux.Router) {
r.HandleFunc("/gen", routeToU2)
r.HandleFunc("/gen", routeAkm)
}
......@@ -8,6 +8,8 @@ type Akm struct {
}
const (
U2Url = "https://www.easyjet.com/en"
VYUrl = "https://m.vueling.com"
U2Url = "https://www.easyjet.com/en"
U2PostUrl = "https://www.easyjet.com/en/buy/flights?isOneWay=on&pid=www.easyjet.com"
VYUrl = "https://m.vueling.com"
VYPostUrl = "https://m.vueling.com"
)
package model
import "github.com/sirupsen/logrus"
func VueLing(carrierType, proxyUrl string) (*Akm, error) {
logger := logrus.WithField("typoe", carrierType)
logger.Info("使用代理", proxyUrl)
akmClient := NewAkmClient(VYUrl, VYPostUrl, proxyUrl, logger)
akmClient.ua = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"
err := akmClient.init()
if err != nil {
return nil, err
}
for i := 0; i < 3; i++ {
err := akmClient.postSensor(i)
if err != nil {
akmClient.logger.WithError(err).Errorln("请求失败")
return nil, err
}
}
akm := &Akm{
Cookies: akmClient.GetAllCookie(),
Ua: akmClient.ua,
}
//query()
return akm, nil
}
......@@ -118,7 +118,7 @@ func (akm *AkmEvent) event111(delay int64) {
e := -1
n := -1
o := -1
akm.dmact = akm.dmact + fmt.Sprintf("%d,%d,%d,%d,%d;", akm.doe_cnt, s, e, n, o)
akm.doact = akm.doact + fmt.Sprintf("%d,%d,%d,%d,%d;", akm.doe_cnt, s, e, n, o)
akm.ta += s
akm.doe_vel = akm.doe_vel + akm.doe_cnt + int(s)
akm.doe_cnt++
......
......@@ -2,6 +2,8 @@ package sensor
import (
"fmt"
"github.com/imroc/biu"
"github.com/sirupsen/logrus"
"math"
"math/rand"
"net/url"
......@@ -147,7 +149,7 @@ func (a AkmSign) genData() string {
RJ := "0"
dJ := "1"
permissions := "11321144241322243122"
if a.Times > 0 {
if a.Times == 0 {
permissions = "8"
}
WJ := ",0,070f409b82df3bdd2f51a6415c7895353c153c47fe6dd8a0f87f3d14c46ccb2b,4,8,5,1,8,5,1,Google Inc. (ATI Technologies Inc.),ANGLE (ATI Technologies Inc., AMD Radeon RX 560 OpenGL Engine, OpenGL 4.1)"
......@@ -170,19 +172,66 @@ func (a AkmSign) genData() string {
}
arg129 := "5a4dd815976b96d7332ee11d4ad4f22fbd9d8484fb33b68201be1b71ded52cf3,1,0,Google Inc. (ATI Technologies Inc.),ANGLE (ATI Technologies Inc., AMD Radeon RX 560 OpenGL Engine, OpenGL 4.1),2cd06f89ccaf413c4875680e907893d902d434005dea52a232d420825cd4fa5f,28"
zN := a.zNfunc()
fmt.Println(zN)
//WN := zN[0]
//DN := zN[1]
//EN := zN[2]
DN := zN[1]
EN := zN[2]
//YN := zN[3]
//GN := zN[4]
//pN := zN[5]
//BN := zN[6]
//AN := a.startTs
//Uz := DN + a.startTs + EN
arg124 := ""
if a.Times == 3 {
if a.Times == 3 || a.Times == 4 {
AN := a.startTs
Uz := fmt.Sprintf("%s%d%s", DN, a.startTs, EN)
ZX := 1
RX := 0
var dX []interface{}
var qX []interface{}
var LX []interface{}
Vz := now() - a.startTs
mX := 0
kX := 0
sX := ""
//uX := now()
nX := ZX + RX
for mX == 0 {
sX = fmt.Sprintf("0.%x", math.Float64bits(rand.Float64()))[:15]
pq := fmt.Sprintf("%s%d%s", Uz, nX, sX)
Tq := Iq(pq)
if 0 == Gq(Tq, nX) {
mX = 1
//lX := now() - a.startTs
dX = append(dX, sX)
LX = append(LX, kX)
if RX == 0 {
qX = append(qX, DN)
qX = append(qX, AN)
qX = append(qX, EN)
qX = append(qX, Uz)
qX = append(qX, ZX)
qX = append(qX, nX)
qX = append(qX, sX)
qX = append(qX, pq)
qX = append(qX, toString(Tq))
qX = append(qX, Vz)
}
}
}
for i := 0; i < 9; i++ {
dX = append(dX, fmt.Sprintf("0.%x", math.Float64bits(rand.Float64()))[:15])
}
XX := []interface{}{0, 0, 1, 0, 1, 0, 1, 1, 1, 1}
lz := []interface{}{0, 0, 0, 1, 11, 0, 1, 2, 1, 6}
qX = append(qX, 0)
qX = append(qX, now())
result := fmt.Sprintf("%s;%s;%s;%s;", toString(dX), toString(XX), toString(lz), toString(qX))
fmt.Println(toString(qX))
fmt.Println(result)
}
times1 := 0
switch a.Times {
......@@ -251,6 +300,161 @@ func (a AkmSign) genData() string {
}
return GenSensorData(toStringList(data), a.Bmsz, f3)
}
func Gq(NXU []interface{}, zXU int) int {
WXU := 0
for EXU := 0; EXU < len(NXU); EXU++ {
WXU = ZeroFillRightShift(WXU<<8|NXU[EXU].(int), 0)
WXU %= zXU
}
return WXU
}
func Shift(a, b int) int {
//if a<<b > math.MaxInt32 {
// return a
//}
t := biu.ToBinaryString(a << b)
s := t[1 : len(t)-1]
ss := strings.Split(s, " ")
var x int32
biu.ReadBinaryString(strings.Join(ss[4:], ""), &x)
return int(x)
}
func ProcessBiu(str string) string {
s := str[1 : len(str)-1]
ss := strings.ReplaceAll(s, " ", "")
return ss
}
func nn(wdU, jdU int) int {
return ZeroFillRightShift(wdU, jdU) | Shift(wdU, 32-jdU)
}
func Iq(Gn string) []interface{} {
Kn := []int{1116352408, 1899447441, 3049323471, 3921009573, 961987163, 1508970993,
2453635748, 2870763221, 3624381080, 310598401, 607225278, 1426881987, 1925078388, 2162078206,
2614888103, 3248222580, 3835390401, 4022224774, 264347078, 604807628, 770255983, 1249150122,
1555081692, 1996064986, 2554220882, 2821834349, 2952996808, 3210313671, 3336571891, 3584528711,
113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, 1695183700, 1986661051,
2177026350, 2456956037, 2730485921, 2820302411, 3259730800, 3345764771, 3516065817, 3600352804,
4094571909, 275423344, 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218,
1537002063, 1747873779, 1955562222, 2024104815, 2227730452, 2361852424, 2428436474, 2756734187,
3204031479, 3329325298}
bn := 1779033703
hn := 3144134277
Pn := 1013904242
Qn := 2773480762
Bn := 1359893119
Sn := 2600822924
Mn := 528734635
Hn := 1541459225
Zn, _ := url.QueryUnescape(Gn)
gn := 8 * len(Zn)
tlen := len(Zn)
Zn += string(byte(128))
Fn := len(Zn)/4 + 2
Vn := int(math.Ceil(float64(Fn/16))) + 1
Rn := make([][]int, Vn)
for Ln := 0; Ln < Vn; Ln++ {
Rn[Ln] = make([]int, 16)
for Xn := 0; Xn < 16; Xn++ {
if 64*Ln+4*Xn >= tlen {
break
}
fmt.Println(tlen, 64*Ln+4*Xn)
tt := Zn[64*Ln+4*Xn+3]
if 64*Ln+4*Xn+3 == 139 {
tt = 128
}
Rn[Ln][Xn] = int(Zn[64*Ln+4*Xn])<<24 | int(Zn[64*Ln+4*Xn+1])<<16 | int(Zn[64*Ln+4*Xn+2])<<8 | int(tt)<<0
}
}
qn := float64(gn) / math.Pow(float64(2), float64(32))
Rn[Vn-1][14] = int(math.Floor(qn))
Rn[Vn-1][15] = gn
for zn := 0; zn < Vn; zn++ {
Yn := make([]int, 64)
xn := bn
On := hn
En := Pn
fn := Qn
tn := Bn
Jn := Sn
wn := Mn
rn := Hn
for mn := 0; mn < 64; mn++ {
if mn < 16 {
Yn[mn] = Rn[zn][mn]
} else {
sn := nn(Yn[mn-15], 7) ^ nn(Yn[mn-15], 18) ^ ZeroFillRightShift(Yn[mn-15], 3)
//fmt.Println("sn", mn, sn)
Un := nn(Yn[mn-2], 17) ^ nn(Yn[mn-2], 19) ^ ZeroFillRightShift(Yn[mn-2], 10)
Yn[mn] = Yn[mn-16] + sn + Yn[mn-7] + Un
Un = nn(tn, 6) ^ nn(tn, 11) ^ nn(tn, 25)
kn := rn + Un + int(int32(tn)&int32(Jn)^int32(Not(tn))&int32(wn)) + Kn[mn] + Yn[mn]
//fmt.Println("sn2", mn, rn, Un, tn, Jn, wn, kn)
ln := xn&On ^ xn&En ^ On&En
rn = wn
wn = Jn
Jn = tn
tn = ZeroFillRightShift(fn+kn, 0)
//fmt.Println("tn", fn, kn, tn)
fn = En
En = On
On = xn
sn = nn(xn, 2) ^ nn(xn, 13) ^ nn(xn, 22)
xn = ZeroFillRightShift(kn+sn+ln, 0)
}
}
bn += xn
hn += On
Pn += En
Qn += fn
Bn += tn
Sn += Jn
Mn += wn
Hn += rn
//fmt.Println(bn, hn, Pn, Qn, Bn, Sn, Mn, Hn)
}
return []interface{}{
bn >> 24 & 255, bn >> 16 & 255, bn >> 8 & 255, 255 & bn,
hn >> 24 & 255, hn >> 16 & 255, hn >> 8 & 255, 255 & hn,
Pn >> 24 & 255, Pn >> 16 & 255, Pn >> 8 & 255, 255 & Pn,
Qn >> 24 & 255, Qn >> 16 & 255, Qn >> 8 & 255, 255 & Qn,
Bn >> 24 & 255, Bn >> 16 & 255, Bn >> 8 & 255, 255 & Bn,
Sn >> 24 & 255, Sn >> 16 & 255, Sn >> 8 & 255, 255 & Sn,
Mn >> 24 & 255, Mn >> 16 & 255, Mn >> 8 & 255, 255 & Mn,
Hn >> 24 & 255, Hn >> 16 & 255, Hn >> 8 & 255, 255 & Hn,
}
}
func Not(tn int) int {
return -tn - 1
}
func ZeroFillRightShift(un int, i int) int {
t := biu.ToBinaryString(int32(un))
s := t[1 : len(t)-1]
sList := strings.Split(s, " ")
ss := strings.Join(sList, "")
var res int64
//-10101100000010000010101011100
//101010011111101111101010100100
// 1110101001111110111110101
zeroFill := ""
for k := 0; k < i; k++ {
zeroFill += "0"
}
ok := biu.ReadBinaryString(fmt.Sprintf("%s%s", zeroFill, ss[:len(ss)-i]), &res)
if ok != nil {
logrus.Error(ok)
}
return int(res)
}
func toString(data []interface{}) string {
res := make([]string, len(data))
......@@ -349,7 +553,7 @@ func (a AkmSign) gen90() []int {
func (a AkmSign) zNfunc() map[int]any {
abck, _ := url.QueryUnescape(a.Abck)
TXU := strings.SplitAfter(abck, "~")
TXU := strings.Split(abck, "~")
if len(TXU) > 5 {
bXU := TXU[0]
mxU := strings.Split(TXU[4], "||")
......@@ -501,8 +705,8 @@ func splitBmsz(bmsz string) []int {
func bd(a, b string) string {
return a + b
}
func GenData(abck, bmsz, ua, url string) string {
akm := NewAkmSign(0, url, ua, abck, bmsz)
func GenData(times int, abck, bmsz, ua, url string) string {
akm := NewAkmSign(times, url, ua, abck, bmsz)
return akm.genData()
}
......@@ -512,7 +716,7 @@ func main() {
bmsz := "F7BF54E40B51C55E0818DC07CD173D3D~YAAQtto4fZOUjTaGAQAAu2TuXRLag7FMMOcGVWfM6R1TuxY9u8Z+UDLtA8qE03/kyE1u1gycaSyEWy9GEbaHoyc2CT7Gqokpc8mxNY8qoEITjbsXZlhLE9Zm2K7ekUb1wAsxocavW2rsJTBvlEfYAcPs6/04ASA1QueCbMErtMm5Jqg7MnPVmCym75ewsP6qihOts07wgEWNkbSsdaHzQf4cm3uHxirh3o91GojyUSGrxRcFRn4NJlQtxIX/PrOsUr4HyxcYTAX+WUh6QyBCzGQ4pNgiszuc4R9OdAy3XGc6LzUP7PBIl5fz6OpZUj2gTJT2j5WPOn2I469jdYrZCAMoajftNJ9nrdy36vkz9S+Xp3z7dh9btp+Q+bpRYd1M9zhtmlmHxTTSv7rs6sOBHE/tmvEHXtc=~3748403~3683895"
ua := "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.50"
GenData(abck, bmsz, ua, url)
GenData(3, abck, bmsz, ua, url)
//datas := "-100---Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.41,uaend,12147,20030107,zh-CN,Gecko,5,0,0,0,412917,0,2560,980,2560,1080,2560,901,2560,,cpen:0,i1:0,dm:0,cwen:0,non:1,opc:0,fc:0,sc:0,wrc:1,isc:0,vib:1,bat:1,x11:0,x12:1,9744,0.864927429432,839100684994.5,0,loc:----105---0,-1,0,0,-1,566,0;-1,-1,0,0,-1,-1,0;-1,-1,0,0,-1,-1,0;-1,-1,0,0,-1,-1,0;-1,-1,0,0,-1,-1,0;0,-1,0,0,-1,566,0;----108-------101---do_en,dm_en,t_en----110---0,1,609,842,698;1,1,583,685,666;2,1,623,979,547;3,1,602,894,530;4,1,623,805,441;5,1,596,934,308;6,1,556,930,550;7,1,545,928,488;8,1,541,633,418;9,1,599,876,793;10,1,572,687,699;11,1,607,784,493;12,1,586,520,700;13,1,566,504,625;14,1,569,573,425;15,1,595,536,710;16,1,618,877,695;17,1,547,571,709;18,1,609,766,693;19,1,562,632,530;20,1,637,735,523;21,1,551,699,407;22,1,553,595,467;23,1,555,669,609;24,1,624,641,505;25,1,628,725,691;26,1,611,922,521;27,1,584,887,733;28,1,616,964,795;29,1,590,807,581;30,1,586,623,404;31,1,538,972,364;32,1,548,791,659;33,1,571,868,501;34,1,598,973,637;35,1,548,586,556;36,1,616,980,777;37,1,605,877,511;38,1,594,974,685;39,1,600,769,691;40,1,549,673,591;41,1,634,835,545;42,1,569,753,597;43,1,550,602,429;44,1,592,651,553;45,1,608,742,361;46,1,552,878,667;47,1,631,591,464;48,1,585,994,347;49,1,555,684,576;50,1,600,686,729;51,1,628,985,391;52,1,637,561,769;53,1,566,545,383;54,1,631,690,492;55,1,552,537,739;56,1,615,977,516;57,1,603,756,586;58,1,574,657,587;59,1,616,926,673;60,1,636,563,508;61,1,561,628,604;62,1,547,676,491;63,1,578,995,525;64,1,586,973,671;65,1,565,502,484;66,1,624,599,766;67,1,612,861,401;68,1,628,745,563;69,1,541,725,799;70,1,567,704,650;71,1,545,877,447;72,1,550,556,663;73,1,635,702,595;74,1,605,753,558;75,1,611,969,628;76,1,541,881,393;77,1,588,791,554;78,1,575,553,527;79,1,587,742,711;80,1,541,574,447;81,1,596,812,382;82,1,621,602,796;83,1,626,693,376;84,1,586,611,523;85,1,551,534,702;86,1,609,786,388;87,1,549,773,754;88,1,610,727,345;89,1,543,606,437;90,1,552,547,487;91,1,553,779,384;92,1,541,768,588;93,1,624,591,620;94,1,561,661,354;95,1,633,729,698;96,1,634,503,586;97,1,586,814,312;98,1,551,901,717;99,1,568,571,787;1607,3,26307,849,243,-1;----117-------109-------102---0,-1,0,0,-1,566,0;0,-1,0,0,1223,1223,0;0,-1,0,0,-1,566,0;----111-------114-------103-------106---9,2----115---1,32,32,0,0,0,0,122,0,1678201369989,555,17952,0,0,2992,0,0,37,0,0,08A3A67A872787A1DA63B33C1B6F6266~-1~YAAQtto4faoFjjaGAQAAyLb0XQmN75m4SdNZL1Mhxzd6fBT2ehvIgWFgVBy17LBJba5URgSuHwAtvbQhzm/rXFQGm1a5mnqcZqW4hFtD7HXm26efjv/f+SD6FVCaQmQ4U1sWpr0Uw7kxaEKtOZwmIS0Lx3g4lm6q/jwResUdTJX//gxTjv1aOnE2GhvB/KjPiEpW2uA/eOaxT2oMSSDYWakxqRgblkhagV+RR1YJ67f0S0vPkYMoZYvoS2Ni0UHOOzBbDYPYErAcO+d66tglpJWBd/pwp0hLeeVc1z0Hh3a3yUfzFQf+2XINO7x6By/u/3QNTg208ApArF4LYKxH4BPmb2S69MvN/nGTTP6gjuZaGA3r4GlYQfV/3DpEkJU96Wg3R8iPczz5zJ7XTZzPp5fXqAMs1S0qP2XugZtRbxlhgfKWFP7ot8JXOmFTqTfUkWiSa+nyEA==~-1~-1~-1,41950,213,-1194943582,30261693,PiZtE,47604,69,0,-1,0----112---https://wizzair.com/en-gb#/booking/select-flight/TLV/LTN/2023-03-10/null/1/0/0/null----119----1----122---0,0,0,0,1,0,0----123-------124-------126-------127---01301044241322243122----128---,0,070f409b82df3bdd2f51a6415c7895353c153c47fe6dd8a0f87f3d14c46ccb2b,4,8,5,1,8,5,1,Google Inc. (ATI Technologies Inc.),ANGLE (ATI Technologies Inc., AMD Radeon RX 560 OpenGL Engine, OpenGL 4.1),1,940925d1b20db7e9ace7d42cb9f7efb38d0d1b3e77f44b62f059f99f534425ac----131---4294705152,42611879,4252093273,100,350,1,1,1,0,1----132---0,841583dac09a721cf2d2c57a09180590d9939b2b73219e5cc6b1dc72b2b04594,0123456789101112,Reload,-1----133-------70----841148590;-1;dis;,7;true;true;true;-480;true;24;24;true;false;-1----80---5059----90---19|12----116---0----129---5a4dd815976b96d7332ee11d4ad4f22fbd9d8484fb33b68201be1b71ded52cf3,1,d4e06ee2f99cda3a5513c1d789b160f7e89199ffd53ce46874be61c7b1974f60,Google Inc. (ATI Technologies Inc.),ANGLE (ATI Technologies Inc., AMD Radeon RX 560 OpenGL Engine, OpenGL 4.1),2cd06f89ccaf413c4875680e907893d902d434005dea52a232d420825cd4fa5f,28"
//datas = "-100||||Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.41,uaend,12147,20030107,zh-CN,Gecko,5,0,0,0,412918,0,2560,980,2560,1080,2560,901,2560,,cpen:0,i1:0,dm:0,cwen:0,non:1,opc:0,fc:0,sc:0,wrc:1,isc:0,vib:1,bat:1,x11:0,x12:1,9744,0.04781215623,839102295873,0,loc:||||-105||||0,-1,0,0,-1,566,0;-1,-1,0,0,-1,-1,0;-1,-1,0,0,-1,-1,0;-1,-1,0,0,-1,-1,0;-1,-1,0,0,-1,-1,0;0,-1,0,0,-1,566,0;||||-108||||||||-101||||do_en,dm_en,t_en||||-110||||0,1,511,523,323;1,1,511,523,323;2,1,511,523,323;3,1,511,523,323;4,1,512,523,323;5,1,512,523,323;6,1,512,523,323;7,1,512,523,323;8,1,512,523,323;9,1,512,523,323;10,1,512,523,323;11,1,512,523,323;12,1,512,523,323;13,1,512,523,323;14,1,512,523,323;15,1,512,523,323;16,1,512,523,323;17,1,512,523,323;18,1,512,523,323;19,1,512,523,323;20,1,512,523,323;21,1,512,523,323;22,1,512,523,323;23,1,512,523,323;24,1,512,523,323;25,1,512,523,323;26,1,512,523,323;27,1,512,523,323;28,1,512,523,323;29,1,512,523,323;30,1,512,523,323;31,1,512,523,323;32,1,512,523,323;33,1,512,523,323;34,1,512,523,323;35,1,512,523,323;36,1,512,523,323;37,1,512,523,323;38,1,512,523,323;39,1,512,523,323;40,1,512,523,323;41,1,512,523,323;42,1,512,523,323;43,1,512,523,323;44,1,512,523,323;45,1,512,523,323;46,1,512,523,323;47,1,512,523,323;48,1,512,523,323;49,1,512,523,323;50,1,512,523,323;51,1,512,523,323;52,1,512,523,323;53,1,512,523,323;54,1,512,523,323;55,1,512,523,323;56,1,512,523,323;57,1,512,523,323;58,1,512,523,323;59,1,512,523,323;60,1,512,523,323;61,1,512,523,323;62,1,512,523,323;63,1,512,523,323;64,1,512,523,323;65,1,512,523,323;66,1,512,523,323;67,1,512,523,323;68,1,512,523,323;69,1,512,523,323;70,1,512,523,323;71,1,512,523,323;72,1,512,523,323;73,1,512,523,323;74,1,512,523,323;75,1,512,523,323;76,1,512,523,323;77,1,512,523,323;78,1,512,523,323;79,1,512,523,323;80,1,512,523,323;81,1,512,523,323;82,1,512,523,323;83,1,512,523,323;84,1,512,523,323;85,1,512,523,323;86,1,512,523,323;87,1,512,523,323;88,1,512,523,323;89,1,512,523,323;90,1,512,523,323;91,1,512,523,323;92,1,512,523,323;93,1,512,523,323;94,1,512,523,323;95,1,512,523,323;96,1,512,523,323;97,1,512,523,323;98,1,512,523,323;99,1,512,523,323;1607,3,26307,849,243,-1;||||-117||||||||-109||||||||-102||||0,-1,0,0,-1,566,0;0,-1,0,0,1223,1223,0;0,-1,0,0,-1,566,0;||||-111||||||||-114||||||||-103||||||||-106||||9,2||||-115||||1,32,32,0,0,0,0,109,0,1678204591746,526,17952,0,0,2992,0,0,7,0,0,08A3A67A872787A1DA63B33C1B6F6266~-1~YAAQtto4faoFjjaGAQAAyLb0XQmN75m4SdNZL1Mhxzd6fBT2ehvIgWFgVBy17LBJba5URgSuHwAtvbQhzm/rXFQGm1a5mnqcZqW4hFtD7HXm26efjv/f+SD6FVCaQmQ4U1sWpr0Uw7kxaEKtOZwmIS0Lx3g4lm6q/jwResUdTJX//gxTjv1aOnE2GhvB/KjPiEpW2uA/eOaxT2oMSSDYWakxqRgblkhagV+RR1YJ67f0S0vPkYMoZYvoS2Ni0UHOOzBbDYPYErAcO+d66tglpJWBd/pwp0hLeeVc1z0Hh3a3yUfzFQf+2XINO7x6By/u/3QNTg208ApArF4LYKxH4BPmb2S69MvN/nGTTP6gjuZaGA3r4GlYQfV/3DpEkJU96Wg3R8iPczz5zJ7XTZzPp5fXqAMs1S0qP2XugZtRbxlhgfKWFP7ot8JXOmFTqTfUkWiSa+nyEA==~-1~-1~-1,41950,47,55285803,30261693,PiZtE,14781,57,0,-1,0||||-112||||https://wizzair.com/en-gb#/booking/select-flight/TLV/LTN/2023-03-10/null/1/0/0/null||||-119||||-1||||-122||||0,0,0,0,1,0,0||||-123||||||||-124||||||||-126||||||||-127||||01301044241322243122||||-128||||,0,070f409b82df3bdd2f51a6415c7895353c153c47fe6dd8a0f87f3d14c46ccb2b,4,8,5,1,8,5,1,Google Inc. (ATI Technologies Inc.),ANGLE (ATI Technologies Inc., AMD Radeon RX 560 OpenGL Engine, OpenGL 4.1),1,940925d1b20db7e9ace7d42cb9f7efb38d0d1b3e77f44b62f059f99f534425ac||||-131||||4294705152,25867343,4268837809,100,350,1,1,1,0,1||||-132||||0,841583dac09a721cf2d2c57a09180590d9939b2b73219e5cc6b1dc72b2b04594,0123456789101112,Reload,-1||||-133||||||||-70||||-841148590;-1;dis;,7;true;true;true;-480;true;24;24;true;false;-1||||-80||||5059||||-90||||8|1||||-116||||0||||-129||||5a4dd815976b96d7332ee11d4ad4f22fbd9d8484fb33b68201be1b71ded52cf3,1,d4e06ee2f99cda3a5513c1d789b160f7e89199ffd53ce46874be61c7b1974f60,Google Inc. (ATI Technologies Inc.),ANGLE (ATI Technologies Inc., AMD Radeon RX 560 OpenGL Engine, OpenGL 4.1),2cd06f89ccaf413c4875680e907893d902d434005dea52a232d420825cd4fa5f,28"
//
......
......@@ -17,6 +17,7 @@ func query(data []byte) {
v := model.Akm{}
json.Unmarshal(data, &v)
fmt.Println(v.Ua)
jar := tls_client.NewCookieJar()
options := []tls_client.HttpClientOption{
tls_client.WithTimeoutSeconds(30),
......@@ -62,6 +63,38 @@ func query(data []byte) {
//fmt.Println(string(readBytes))
}
func actU2() {
t1 := time.Now()
//resp, err := http.Post("http://lcc.unififi.com/akamai/gen",
resp, err := http.Post("http://127.0.0.1:59001/akamai/gen",
//"application/json", strings.NewReader("{\"type\": \"u2\", \"proxy\": \"http://unfflcc:76cc14-47b8dd-1f8ace-827836-0c740e@usa.rotating.proxyrack.net:6521\"}"))
"application/json", strings.NewReader("{\"type\": \"U2\", \"proxy\": \"http://127.0.0.1:8890\"}"))
//resp, err := http.Post("http://127.0.0.1:59001/akamai/gen", "application/json", strings.NewReader("{\"type\": \"u2\", \"proxy\": \"http://user-unifflcc-region-us:q39CEBTs5A5YQXor@pr.roxlabs.cn:4600\"}"))
if err != nil {
//panic(err)
fmt.Println(err)
return
}
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println("abck cost", time.Since(t1).String())
query(body)
}
func actVY() {
t1 := time.Now()
//resp, err := http.Post("http://lcc.unififi.com/akamai/gen",
resp, err := http.Post("http://127.0.0.1:59001/akamai/gen",
//"application/json", strings.NewReader("{\"type\": \"u2\", \"proxy\": \"http://unfflcc:76cc14-47b8dd-1f8ace-827836-0c740e@usa.rotating.proxyrack.net:6521\"}"))
"application/json", strings.NewReader("{\"type\": \"VY\", \"proxy\": \"http://127.0.0.1:8890\"}"))
//resp, err := http.Post("http://127.0.0.1:59001/akamai/gen", "application/json", strings.NewReader("{\"type\": \"u2\", \"proxy\": \"http://user-unifflcc-region-us:q39CEBTs5A5YQXor@pr.roxlabs.cn:4600\"}"))
if err != nil {
//panic(err)
fmt.Println(err)
return
}
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println("abck cost", time.Since(t1).String())
testU2Data(body)
}
func main() {
for i := 0; i < 1; i++ {
t1 := time.Now()
......@@ -71,24 +104,8 @@ func main() {
wg.Add(1)
go func() {
defer wg.Done()
//172.29.204.120
//resp, err := http.Post("http://172.29.199.203:9999/get-proxy", "application/x-www-form-urlencoded", strings.NewReader("name=NK&type=other&country=us"))
//resp, err := http.Get("http://127.0.0.1:9999/ping")
//resp, err := http.Post("http://lcc.unififi.com/proxy/get-proxy", "application/json", strings.NewReader("{\n \"name\": \"NK\",\n \"type\": \"shopping\"\n}"))
t1 := time.Now()
//resp, err := http.Post("http://lcc.unififi.com/akamai/gen",
resp, err := http.Post("http://127.0.0.1:59001/akamai/gen",
//"application/json", strings.NewReader("{\"type\": \"u2\", \"proxy\": \"http://unfflcc:76cc14-47b8dd-1f8ace-827836-0c740e@usa.rotating.proxyrack.net:6521\"}"))
"application/json", strings.NewReader("{\"type\": \"u2\", \"proxy\": \"http://127.0.0.1:8890\"}"))
//resp, err := http.Post("http://127.0.0.1:59001/akamai/gen", "application/json", strings.NewReader("{\"type\": \"u2\", \"proxy\": \"http://user-unifflcc-region-us:q39CEBTs5A5YQXor@pr.roxlabs.cn:4600\"}"))
if err != nil {
//panic(err)
fmt.Println(err)
return
}
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println("abck cost", time.Since(t1).String())
query(body)
actVY()
actU2()
}()
}
......@@ -99,3 +116,56 @@ func main() {
}
}
func testU2Data(data []byte) {
datas := "{\n\t\"DeviceType\": \"WEB\",\n\t\"UserAgent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1\",\n\t\"Udid\": \"c4bf-275d-76b1-ff7f-83c3-cfcd\",\n\t\"IP\": \"235.231.34.152\",\n\t\"AppVersion\": \"17.2.0\",\n\t\"Domain\": \"https://m.vueling.com\",\n\t\"DiscountType\": 0,\n\t\"Paxs\": [{\n\t\t\"PaxType\": \"ADT\",\n\t\t\"Quantity\": \"1\"\n\t}, {\n\t\t\"PaxType\": \"CHD\",\n\t\t\"Quantity\": \"0\"\n\t}, {\n\t\t\"PaxType\": \"INF\",\n\t\t\"Quantity\": \"0\"\n\t}],\n\t\"CurrencyCode\": \"EUR\",\n\t\"AirportDateTimeList\": [{\n\t\t\"ArrivalStation\": \"LON\",\n\t\t\"DepartureStation\": \"LCG\",\n\t\t\"MarketDateDeparture\": \"2023-03-16\"\n\t}],\n\t\"Language\": \"en-GB\"\n}"
v := model.Akm{}
json.Unmarshal(data, &v)
fmt.Println(v.Ua)
jar := tls_client.NewCookieJar()
options := []tls_client.HttpClientOption{
tls_client.WithTimeoutSeconds(30),
tls_client.WithClientProfile(tls_client.Chrome_110),
tls_client.WithCookieJar(jar), // create cookieJar instance and pass it as argument
tls_client.WithProxyUrl("http://127.0.0.1:8890"),
//tls_client.WithProxyUrl("http://unfflcc:76cc14-47b8dd-1f8ace-827836-0c740e@usa.rotating.proxyrack.net:6521"),
tls_client.WithInsecureSkipVerify(),
}
uri, _ := url.Parse("https://m.vueling.com/")
var cookies []*http.Cookie
for key, value := range v.Cookies {
cookies = append(cookies, &http.Cookie{
Name: key,
Value: value,
})
}
jar.SetCookies(uri, cookies)
Client, err := tls_client.NewHttpClient(tls_client.NewNoopLogger(), options...)
req, err := http.NewRequest("POST", "https://apimobile.vueling.com/Vueling.Mobile.AvailabilityService.WebAPI/api/V2/AvailabilityController/DoAirPriceSB", strings.NewReader(datas))
if err != nil {
panic(err)
}
req.Header.Set("Host", "apimobile.vueling.com")
req.Header.Set("Upgrade-Insecure-Requests", "1")
req.Header.Set("user-agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1")
req.Header.Set("accept", "application/json, text/plain, */*")
req.Header.Set("sec-fetch-site", "same-site")
req.Header.Set("sec-fetch-mode", "cors")
req.Header.Set("Sec-Fetch-User", "?1")
req.Header.Set("sec-fetch-dest", "empty")
req.Header.Set("accept-language", "en-US,en;q=0.9")
req.Header.Set("pragma", "no-cache")
req.Header.Set("cache-control", "no-cache")
req.Header.Set("content-type", "application/json")
req.Header.Set("origin", "https://m.vueling.com")
req.Header.Set("referer", "https://m.vueling.com/")
req.Header.Set("Content-Type", "application/json")
resp, err := Client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("响应结果", resp.StatusCode)
}
package main
import (
"encoding/json"
"fmt"
fhttp "github.com/bogdanfinn/fhttp"
tls_client "github.com/bogdanfinn/tls-client"
"io"
"net/url"
"strings"
"github.com/imroc/biu"
"test/sensor"
)
......@@ -20,57 +15,78 @@ func main() {
abck := "B9E0C674552DB391815F82C0647FADC9~-1~YAAQBGUzuBl9/72GAQAAyb94wAm4ydH5I2znFxoyfaPIvHOHSyqXZHzgQ7m2RkagTpBzztNa5LmNFcqg4DNXEm/tZ+r1JxOWYfLY1EA5bzEvauFo6puMeVBuo4HdbMVfmxlwKaZpIQRNtUq0Z1wEmw2rrWetb3RktDypg1QT1tuF/hnXMQseB7YMYUY2Gku1MCLDlJF3wgsm6+tXjbhbqG0RR5IKiv3My4Q5kx2JEGDFV+X/RgB5wQz1ggUsipMSyDhrqlBsYhuMxyOzZNUQX29HuKZZjKTF3omqkyGJIrMhWz7yQ3fwlKrTYjswHxIX/GP4rZqWUL3m0Zhnhu/SrZipSJOLtKbgTwTuQS+iAXNP5DsSVGL0s8+nMrQNuIVyCNUZg3nxRRjgDx/+AvYppn2xiwW/tkuOAYIbtFRkirM5J9U=~-1~||1-EAjzIUtDUl-2250-10-1000-2||~-"
bmsz := "F7BF54E40B51C55E0818DC07CD173D3D~YAAQtto4fZOUjTaGAQAAu2TuXRLag7FMMOcGVWfM6R1TuxY9u8Z+UDLtA8qE03/kyE1u1gycaSyEWy9GEbaHoyc2CT7Gqokpc8mxNY8qoEITjbsXZlhLE9Zm2K7ekUb1wAsxocavW2rsJTBvlEfYAcPs6/04ASA1QueCbMErtMm5Jqg7MnPVmCym75ewsP6qihOts07wgEWNkbSsdaHzQf4cm3uHxirh3o91GojyUSGrxRcFRn4NJlQtxIX/PrOsUr4HyxcYTAX+WUh6QyBCzGQ4pNgiszuc4R9OdAy3XGc6LzUP7PBIl5fz6OpZUj2gTJT2j5WPOn2I469jdYrZCAMoajftNJ9nrdy36vkz9S+Xp3z7dh9btp+Q+bpRYd1M9zhtmlmHxTTSv7rs6sOBHE/tmvEHXtc=~3748403~3683895"
ua := "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.50"
abck = "516B86EA1620DF2CD0AC1D743A010F36~-1~YAAQW5gQAoD1+72GAQAAMiheyQkpTFaF26jHn5uhjEiACdsvngfkLJrwU4Rgi7Vj1Xlsrqg0TrQ38AhG5j52XFV/DJvioFkZIflt0CoapREyK6/YLRBHBugV6F5lEqm25TBdHnUTZNIH8RGdlGkNMpYkAt7J5H4GCVK1VmK7EQjUIAlnTW15WOL+/vDOtlPmeTZDNk7anyEqWTooeZbhe9TIifZsiNLgyJMMiUD9vZEDk3xbeaghw9+J2ssoPswmeab9ZspHG6DgQ6SomuyOnrdR2kTgZYK4GSo6yRUXu1KGWN5kEYOcjiEsFO3gQ/dlUj1bnCjLL0DeClFdu8R/W7ZYaZ9YsnH/v+6RAS0o6LFuVFXKct7J7/tQVtDJexDx+NDgUeixhXjfqYaT+7rSm9mJdg62h6Mc3Q==~-1~||||1-lhsItjIDEj-3500-100-1000-3~-1"
println(sensor.GenData(abck, bmsz, ua, url1))
//uri := "https://tls.peet.ws/api/all"
jar := tls_client.NewCookieJar()
options := []tls_client.HttpClientOption{
tls_client.WithTimeoutSeconds(30),
tls_client.WithClientProfile(tls_client.Chrome_110),
tls_client.WithNotFollowRedirects(),
tls_client.WithCookieJar(jar), // create cookieJar instance and pass it as argument
tls_client.WithProxyUrl("http://127.0.0.1:8890"),
//tls_client.WithProxyUrl("http://unfflcc:76cc14-47b8dd-1f8ace-827836-0c740e@usa.rotating.proxyrack.net:6521"),
tls_client.WithInsecureSkipVerify(),
//tls_client.WithForceHttp1(),
}
v := Ck{}
cks := "{\n\t\t\"cookies\" :{\n\t\t\"userCountryLocation\": \"US\",\n\t\t\t\"userGeolocation\": \"\\\"-87.6229, 41.8858\\\"\",\n\t\t\t\"_pxhd\": \"d91c81e0aa18349b33c2ddca4deed8f91f9c88cd5c534677a16799abbe1139b0:50bcdcd4-c24d-11ed-ad32-487357495a66\",\n\t\t\t\"_abck\": \"24EA9D210057C70E11FF614B91DF7EBD~-1~YAAQsQXGF00pr9yGAQAAvhSF3wm/BWzy5kApgX+5/ueNVCJoPH5HRo3ctT0g82om8SsJ3Y0iFzo0Upp0VQS4Z3zvt61wTCyKizBpP9cDCMbZg10fOdujwTMeWVGnOV/yVwXtCpCkhzvbyP9DaK98v8c/ibpLFXsAehkQDZ5HegGDL9zTJW47QS7XSuiF5EOvQxHm9AQNo0mEzg+4b+EODwN86J00fPdyX2dbPmFqEuWNLMADAJ2xfctA0GVspHCWdVJ+/M0E5tTn7v/5OsN4+M+7hvPJADtWF3PRTsL/sfvIA0uZIUEchUBDPP35CQKkUNlAJQl2utx5GA044phGY8my+lPQqoK5ukWtsIvze8KOgui7JxN0gmJftv452kIqNyuGPe6D9XIWIEw=~-1~||1-JwvpCjJbei-1-10-1000-2||~1678790855\",\n\t\t\t\"ak_bmsc\": \"725C69B7D47B4F13BC998DB65CD46C19~000000000000000000000000000000~YAAQsQXGF3Aor9yGAQAAOw2F3xMtpwBMjF/4u7iZWJrPRZflWfbcFNxtS4EElzFcX/l3tI/KEg0uGjdCZcyoL2YrmpDT78li1VNQiU+GMl0XUVg4dw6HdfZH6/uDLP4GsRJ9Ws1uvQ1RenowkTPtPwMK1pGLrkfG4ex4G1CFnh21/NbBegGYu69C5S6cUGRPELJOBo79a9Jp0YuPA91r+9ggWOQPaE13l5lzjhInOPP6/qhM9uYzM3xKrOKY46XnT8eIoyKRgEiDcMFMbZ7qiXcwkjtN2aQRZ6k5YifbDgGpiubkKUFI3OcNRDJAs0TEXwyjIKwY/MUqSlXef5m7kPtfuMopfNcC21LuOkC7nTtQiGZUuuZV/Z+XTkgv36Z81KJNZ7KhfS3JRw==\",\n\t\t\t\"bm_sz\": \"8CC1F124E6855567DE19ED8EDDA48DC9~YAAQsQXGF3Ior9yGAQAAOw2F3xNXh5g1MMlaxXrb05etxpO5tvhU2V6at4c8fuMZJfvWvkIYGiRRHia383VZUp9Bhj7eAViluKYp7BWwWBJGMUOAHuiVfcDD3o7m0JswBjdojxV6qxZuvhZdOZo8ICehDGJ02cquqAgBibPJy+yG4/+ccqLO8iFNVkjgsKzO8dLRXW5/UoF75FEppcAgG0f43ijwCDQIa9ChYfU27pHMaqMf7MfLfbIAgXrccxvTE1fvyTzasbN5VLSj8ZX+OOxfUGzCh4opr4Yz3HNMuNnjQJw=~4600129~4405042\",\n\t\t\t\"bm_mi\": \"B6566A5D630C2670F1E10420592681F8~YAAQsQXGF3Eor9yGAQAAOw2F3xMbgK7Ap2HHbzQ27OPewxpjvyFjGUa/Fsn/okippFK/Fr8+s/oPlWQfjDLmMl1rI+V+4nG/mqsotDqSrnSKGBATZOtpWxuCV40hu7lk1blZ2nhaFAhC3ZcAPojQFkUFZ3D2hLTkcrDkxADX+SOY8II+23DIyOmDDsvLqkejWmmm0VpDu7LCihvnMVcyC0AQ0HIPXkYUT56nfJtPvvrmFAACMgL3mNuHPNqA7rjLJsniJQ1qgt/IsyQYV/UMVs8LZ5KQpGScHCu/rwIx82bEfy+uhIPEvqkV8Fw/XS8Qcu5BL8yW8eY=~1\"\n\t}\n\t}"
json.Unmarshal([]byte(cks), &v)
uri1, _ := url.Parse("https://www.spirit.com/")
var cookies []*fhttp.Cookie
for key, value := range v.Cookies {
cookies = append(cookies, &fhttp.Cookie{
Name: key,
Value: value,
})
}
jar.SetCookies(uri1, cookies)
abck = "B9E0C674552DB391815F82C0647FADC9~-1~YAAQBGUzuBl9/72GAQAAyb94wAm4ydH5I2znFxoyfaPIvHOHSyqXZHzgQ7m2RkagTpBzztNa5LmNFcqg4DNXEm/tZ+r1JxOWYfLY1EA5bzEvauFo6puMeVBuo4HdbMVfmxlwKaZpIQRNtUq0Z1wEmw2rrWetb3RktDypg1QT1tuF/hnXMQseB7YMYUY2Gku1MCLDlJF3wgsm6+tXjbhbqG0RR5IKiv3My4Q5kx2JEGDFV+X/RgB5wQz1ggUsipMSyDhrqlBsYhuMxyOzZNUQX29HuKZZjKTF3omqkyGJIrMhWz7yQ3fwlKrTYjswHxIX/GP4rZqWUL3m0Zhnhu/SrZipSJOLtKbgTwTuQS+iAXNP5DsSVGL0s8+nMrQNuIVyCNUZg3nxRRjgDx/+AvYppn2xiwW/tkuOAYIbtFRkirM5J9U=~-1~||1-EAjzIUtDUl-2250-10-1000-2||~-1"
Client, err := tls_client.NewHttpClient(tls_client.NewNoopLogger(), options...)
if err != nil {
panic(err)
println(sensor.GenData(3, abck, bmsz, ua, url1))
fmt.Println("sss ", string(byte(128)))
fmt.Println("sss ", "aaa"+string(rune(128)), "ssss")
for _, char := range []rune("\u0080") {
fmt.Println(string(char))
}
req, _ := fhttp.NewRequest("POST", "https://www.spirit.com/api/nk-token/api/v1/token", strings.NewReader("{\n\t\t\"applicationName\": \"dotRezWeb\"\n\t}"))
req.Header.Set("Host", "www.spirit.com")
req.Header.Set("accept", "application/json, text/plain, */*")
req.Header.Set("accept-language", "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6")
req.Header.Set("authority", "www.spirit.com")
req.Header.Set("cache-control", "no-cache")
req.Header.Set("content-type", "application/json")
req.Header.Set("ocp-apim-subscription-key", "dc6844776fe84b1c8b68affe7deb7916")
req.Header.Set("origin", "https://www.spirit.com")
req.Header.Set("pragma", "no-cache")
req.Header.Set("referer", "https://www.spirit.com/")
req.Header.Set("sec-ch-ua-mobile", "?0")
req.Header.Set("sec-fetch-dest", "empty")
req.Header.Set("sec-fetch-mode", "cors")
req.Header.Set("sec-fetch-site", "same-origin")
req.Header.Set("user-agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1")
req.Header.Set("x-dtpc", "4$572764892_654h11vJJGIVPCDDJUIBEMACTPMIGRSISICHWMU-0e0")
resp, _ := Client.Do(req)
readBytes, _ := io.ReadAll(resp.Body)
fmt.Println(string(readBytes))
fmt.Println(-32033727, biu.ToBinaryString(int64(-32033727)))
fmt.Println(2634309123, biu.ToBinaryString(int64(2634309123)))
fmt.Println(-1677454335, biu.ToBinaryString(int64(-1677454335)))
var res int64
biu.ReadBinaryString("11111111 11111111 11111111 11111111 10011100 00000100 00010100 00000001", &res)
fmt.Println("res", res)
t := sensor.Iq("Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1")
println(t) ////uri := "https://tls.peet.ws/api/all"
//jar := tls_client.NewCookieJar()
//options := []tls_client.HttpClientOption{
// tls_client.WithTimeoutSeconds(30),
// tls_client.WithClientProfile(tls_client.Chrome_110),
// tls_client.WithNotFollowRedirects(),
// tls_client.WithCookieJar(jar), // create cookieJar instance and pass it as argument
// tls_client.WithProxyUrl("http://127.0.0.1:8890"),
// //tls_client.WithProxyUrl("http://unfflcc:76cc14-47b8dd-1f8ace-827836-0c740e@usa.rotating.proxyrack.net:6521"),
// tls_client.WithInsecureSkipVerify(),
// //tls_client.WithForceHttp1(),
//}
//v := Ck{}
//cks := "{\n\t\t\"cookies\" :{\n\t\t\"userCountryLocation\": \"US\",\n\t\t\t\"userGeolocation\": \"\\\"-87.6229, 41.8858\\\"\",\n\t\t\t\"_pxhd\": \"d91c81e0aa18349b33c2ddca4deed8f91f9c88cd5c534677a16799abbe1139b0:50bcdcd4-c24d-11ed-ad32-487357495a66\",\n\t\t\t\"_abck\": \"24EA9D210057C70E11FF614B91DF7EBD~-1~YAAQsQXGF00pr9yGAQAAvhSF3wm/BWzy5kApgX+5/ueNVCJoPH5HRo3ctT0g82om8SsJ3Y0iFzo0Upp0VQS4Z3zvt61wTCyKizBpP9cDCMbZg10fOdujwTMeWVGnOV/yVwXtCpCkhzvbyP9DaK98v8c/ibpLFXsAehkQDZ5HegGDL9zTJW47QS7XSuiF5EOvQxHm9AQNo0mEzg+4b+EODwN86J00fPdyX2dbPmFqEuWNLMADAJ2xfctA0GVspHCWdVJ+/M0E5tTn7v/5OsN4+M+7hvPJADtWF3PRTsL/sfvIA0uZIUEchUBDPP35CQKkUNlAJQl2utx5GA044phGY8my+lPQqoK5ukWtsIvze8KOgui7JxN0gmJftv452kIqNyuGPe6D9XIWIEw=~-1~||1-JwvpCjJbei-1-10-1000-2||~1678790855\",\n\t\t\t\"ak_bmsc\": \"725C69B7D47B4F13BC998DB65CD46C19~000000000000000000000000000000~YAAQsQXGF3Aor9yGAQAAOw2F3xMtpwBMjF/4u7iZWJrPRZflWfbcFNxtS4EElzFcX/l3tI/KEg0uGjdCZcyoL2YrmpDT78li1VNQiU+GMl0XUVg4dw6HdfZH6/uDLP4GsRJ9Ws1uvQ1RenowkTPtPwMK1pGLrkfG4ex4G1CFnh21/NbBegGYu69C5S6cUGRPELJOBo79a9Jp0YuPA91r+9ggWOQPaE13l5lzjhInOPP6/qhM9uYzM3xKrOKY46XnT8eIoyKRgEiDcMFMbZ7qiXcwkjtN2aQRZ6k5YifbDgGpiubkKUFI3OcNRDJAs0TEXwyjIKwY/MUqSlXef5m7kPtfuMopfNcC21LuOkC7nTtQiGZUuuZV/Z+XTkgv36Z81KJNZ7KhfS3JRw==\",\n\t\t\t\"bm_sz\": \"8CC1F124E6855567DE19ED8EDDA48DC9~YAAQsQXGF3Ior9yGAQAAOw2F3xNXh5g1MMlaxXrb05etxpO5tvhU2V6at4c8fuMZJfvWvkIYGiRRHia383VZUp9Bhj7eAViluKYp7BWwWBJGMUOAHuiVfcDD3o7m0JswBjdojxV6qxZuvhZdOZo8ICehDGJ02cquqAgBibPJy+yG4/+ccqLO8iFNVkjgsKzO8dLRXW5/UoF75FEppcAgG0f43ijwCDQIa9ChYfU27pHMaqMf7MfLfbIAgXrccxvTE1fvyTzasbN5VLSj8ZX+OOxfUGzCh4opr4Yz3HNMuNnjQJw=~4600129~4405042\",\n\t\t\t\"bm_mi\": \"B6566A5D630C2670F1E10420592681F8~YAAQsQXGF3Eor9yGAQAAOw2F3xMbgK7Ap2HHbzQ27OPewxpjvyFjGUa/Fsn/okippFK/Fr8+s/oPlWQfjDLmMl1rI+V+4nG/mqsotDqSrnSKGBATZOtpWxuCV40hu7lk1blZ2nhaFAhC3ZcAPojQFkUFZ3D2hLTkcrDkxADX+SOY8II+23DIyOmDDsvLqkejWmmm0VpDu7LCihvnMVcyC0AQ0HIPXkYUT56nfJtPvvrmFAACMgL3mNuHPNqA7rjLJsniJQ1qgt/IsyQYV/UMVs8LZ5KQpGScHCu/rwIx82bEfy+uhIPEvqkV8Fw/XS8Qcu5BL8yW8eY=~1\"\n\t}\n\t}"
//json.Unmarshal([]byte(cks), &v)
//uri1, _ := url.Parse("https://www.spirit.com/")
//var cookies []*fhttp.Cookie
//for key, value := range v.Cookies {
// cookies = append(cookies, &fhttp.Cookie{
// Name: key,
// Value: value,
// })
//}
//jar.SetCookies(uri1, cookies)
//
//Client, err := tls_client.NewHttpClient(tls_client.NewNoopLogger(), options...)
//if err != nil {
// panic(err)
//}
//req, _ := fhttp.NewRequest("POST", "https://www.spirit.com/api/nk-token/api/v1/token", strings.NewReader("{\n\t\t\"applicationName\": \"dotRezWeb\"\n\t}"))
//req.Header.Set("Host", "www.spirit.com")
//req.Header.Set("accept", "application/json, text/plain, */*")
//req.Header.Set("accept-language", "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6")
//req.Header.Set("authority", "www.spirit.com")
//req.Header.Set("cache-control", "no-cache")
//req.Header.Set("content-type", "application/json")
//req.Header.Set("ocp-apim-subscription-key", "dc6844776fe84b1c8b68affe7deb7916")
//req.Header.Set("origin", "https://www.spirit.com")
//req.Header.Set("pragma", "no-cache")
//req.Header.Set("referer", "https://www.spirit.com/")
//req.Header.Set("sec-ch-ua-mobile", "?0")
//req.Header.Set("sec-fetch-dest", "empty")
//req.Header.Set("sec-fetch-mode", "cors")
//req.Header.Set("sec-fetch-site", "same-origin")
//req.Header.Set("user-agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1")
//req.Header.Set("x-dtpc", "4$572764892_654h11vJJGIVPCDDJUIBEMACTPMIGRSISICHWMU-0e0")
//resp, _ := Client.Do(req)
//
//readBytes, _ := io.ReadAll(resp.Body)
//fmt.Println(string(readBytes))
//a := strings.NewReader("<!DOCTYPE html>\n<html>\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n <meta http-equiv=\"cache-control\" content=\"no-cache\"/>\n <meta http-equiv=\"x-ua-compatible\" content=\"ie=edge\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n <title>Vuelos baratos, billetes de avión y ofertas de vuelos | vueling.com</title>\n <meta name=\"title\" content=\"Vuelos baratos, billetes de avión y ofertas de vuelos | vueling.com\">\n <meta name=\"description\" content=\"Vueling Airlines es una de las aerolíneas de mayor crecimiento en Europa. Ofrece vuelos baratos entre las principales ciudades europeas.\">\n <meta name=\"keywords\" content=\"vuelos baratos, billetes de avión, ofertas de vuelos, Vueling\">\n <meta name=\"version\" content=\"17.2.0\">\n <meta name=\"author\" content=\"Vueling Airlines S.A.\">\n\n <meta property=\"og:title\" content=\"Vuelos baratos, billetes de avión y ofertas de vuelos | vueling.com\"/>\n <meta property=\"og:description\" content=\"Vueling Airlines es una de las aerolíneas de mayor crecimiento en Europa. Ofrece vuelos baratos entre las principales ciudades europeas.\"/>\n <meta property=\"og:url\" content=\"https://m.vueling.com/\"/>\n <meta property=\"og:type\" content=\"website\"/>\n <meta property=\"og:image\" content=\"http://static.vueling.com/mobile/facebook/320x320.jpg\"/>\n <meta property=\"og:image:width\" content=\"320\"/>\n <meta property=\"og:image:height\" content=\"320\"/>\n <meta property=\"og:image:secure_url\" content=\"https://static.vueling.com/mobile/facebook/320x320.jpg\"/>\n <meta name=\"twitter:card\" content=\"app\">\n <meta name=\"twitter:site\" content=\"@vueling\">\n <meta name=\"twitter:description\" content=\"Vueling Airlines es una de las aerolíneas de mayor crecimiento en Europa. Ofrece vuelos baratos entre las principales ciudades europeas.\">\n <meta name=\"twitter:app:country\" content=\"ES\">\n <meta name=\"twitter:app:name:iphone\" content=\"Vueling\">\n <meta name=\"twitter:app:id:iphone\" content=\"445818820\">\n <meta name=\"twitter:app:url:iphone\" content=\"vueling://search\">\n <meta name=\"twitter:app:name:googleplay\" content=\"Vueling\">\n <meta name=\"twitter:app:id:googleplay\" content=\"com.mo2o.vueling\">\n <meta name=\"twitter:app:url:googleplay\" content=\"vueling://search\">\n <meta property=\"al:ios:url\" content=\"vueling://search\"/>\n <meta property=\"al:ios:app_store_id\" content=\"445818820\"/>\n <meta property=\"al:ios:app_name\" content=\"Vueling\"/>\n <meta property=\"al:android:url\" content=\"vueling://search\"/>\n <meta property=\"al:android:app_name\" content=\"Vueling\"/>\n <meta property=\"al:android:package\" content=\"com.mo2o.vueling\"/>\n <meta name=\"appsfuel_code\" content=\"6d4460d85deeb37\"/>\n <link rel=\"alternate\" href=\"android-app://com.mo2o.vueling/vueling/search\"/>\n <link rel=\"alternate\" href=\"ios-app://445818820/vueling/search\"/>\n <meta name=\"google-site-verification\" content=\"EYSTJlud8lX-UoDk7goIphZwV9A0EdokRvxVchHttbg\"/>\n\n <link href=\"/assets/icon/apple-icon-58x58.png\" rel=\"apple-touch-icon\" sizes=\"58x58\">\n <link href=\"/assets/icon/apple-icon-72x72.png\" rel=\"apple-touch-icon\" sizes=\"72x72\">\n <link href=\"/assets/icon/apple-icon-76x76.png\" rel=\"apple-touch-icon\" sizes=\"76x76\">\n <link href=\"/assets/icon/apple-icon-114x114.png\" rel=\"apple-touch-icon\" sizes=\"114x114\">\n <link href=\"/assets/icon/apple-icon-120x120.png\" rel=\"apple-touch-icon\" sizes=\"120x120\">\n <link href=\"/assets/icon/apple-icon-144x144.png\" rel=\"apple-touch-icon\" sizes=\"144x144\">\n <link href=\"/assets/icon/apple-icon-152x152.png\" rel=\"apple-touch-icon\" sizes=\"152x152\">\n <link href=\"/assets/icon/apple-icon-180x180.png\" rel=\"apple-touch-icon\" sizes=\"180x180\">\n <link href=\"/assets/icon/android-icon-192x192.png\" rel=\"icon\" sizes=\"192x192\" type=\"image/png\">\n <link href=\"/assets/icon/favicon-32x32.png\" rel=\"icon\" sizes=\"32x32\" type=\"image/png\">\n <link href=\"/assets/icon/favicon-96x96.png\" rel=\"icon\" sizes=\"96x96\" type=\"image/png\">\n <link href=\"/assets/icon/favicon-16x16.png\" rel=\"icon\" sizes=\"16x16\" type=\"image/png\">\n <meta name=\"apple-mobile-web-app-capable\" content=\"yes\"/>\n <link href=\"/assets/img/splash/apple-splash-2048x2732.png\" media=\"(min-device-width: 1024px) and (max-device-width: 1024px) and (-webkit-min-device-pixel-ratio: 2) and (orientation: portrait)\" rel=\"apple-touch-startup-image\"/>\n <link href=\"/assets/img/splash/apple-splash-1668x2224.png\" media=\"(min-device-width: 834px) and (max-device-width: 834px) and (-webkit-min-device-pixel-ratio: 2) and (orientation: portrait)\" rel=\"apple-touch-startup-image\"/>\n <link href=\"/assets/img/splash/apple-splash-1536x2048.png\" media=\"(min-device-width: 768px) and (max-device-width: 1024px) and (-webkit-min-device-pixel-ratio: 2) and (orientation: portrait)\" rel=\"apple-touch-startup-image\"/>\n <link href=\"/assets/img/splash/apple-splash-1125x2436.png\" media=\"(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)\" rel=\"apple-touch-startup-image\"/>\n <link href=\"/assets/img/splash/apple-splash-1242x2208.png\" media=\"(device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)\" rel=\"apple-touch-startup-image\"/>\n <link href=\"/assets/img/splash/apple-splash-750x1334.png\" media=\"(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)\" rel=\"apple-touch-startup-image\"/>\n <link href=\"/assets/img/splash/apple-splash-640x1136.png\" media=\"(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)\" rel=\"apple-touch-startup-image\"/>\n <link rel=\"manifest\" href=\"/assets/manifest.json\">\n <meta content=\"/assets/icon/ms-icon-144x144.png\" name=\"msapplication-TileImage\">\n <meta name=\"theme-color\" content=\"#FFFFFF\">\n <script src=\"https://nexus.ensighten.com/vueling/vueling_mobile_-_production/Bootstrap.js\"></script>\n <!-- OneTrust Cookies Consent Notice start for vueling.com -->\n <script type=\"text/javascript\" src=\"https://cdn.cookielaw.org/consent/eb440cb9-982b-4dfe-9764-a5f339ad9985/OtAutoBlock.js\"></script>\n <script type=\"text/javascript\">\n function OptanonWrapper() { }\n </script>\n <!-- OneTrust Cookies Consent Notice end for vueling.com -->\n <script type=\"text/javascript\">var monetateT = new Date().getTime();</script>\n <script src=\"//se.monetate.net/js/2/a-02a953bb/p/m.vueling.com/entry.js\"></script>\n <base href=\"/\">\n <style>\n .modalloading { display: none; position: fixed; top: 0; left: 0; height: 100%; width: 100%; background: #f7f7f7; z-index: 104401 }\n .modalloading:before { content: \"\"; position: absolute; width: 200%; height: 200%; top: -50%; left: -50%; z-index: -1; background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAEJ0lEQVR4AeXbQ2Ak7RqA0Tca67dt27Zt27Zt27ZtG2PbthEMvnt216ruJN3J4hSWT5mROkRdWpdJ3EXUB4M6tS+JPo0leC16UM3GjSG4LR+SuK7hB8MjLKAXrRtKcGvaEP/CJUwmcVlDCT6F6VxCALAbo5nKIJZsCMHLM4TEtgRgngGMpJK7WIHVWY0lKC+m4IU4g1+ZQ18e4zU+ozN9GUA/JjGKIQymJz9xDYsXcnALgnNJTKALU0l/o5r+9KUPw5nONCqpIkHcWKjBp/MMS1LBMXzHPDpyMhfxAN8ylAEMZAT96EsXOvE2Z9OSUpamaSEEL86bfMRmBMRi9CexGfE3tmMgw0ncR1MWZlHaEX+jhEVYmYXqM3hrBvIgpcTfOJRqLiAAOIrRzKDL/xHRnFVYuj6Cd2MyFxH/QktWoIwA4Aqmk7iY+D+UsTIrUVJXwbuSOI/I4BESA1ie+D+VsDqr1kXwaiTuIDJYlC9J3EtkVMr6rFrbwSP4hshoC/qS2I3IQTO2YenaCn6WWbQkMjqSRDciD5ZmZ1rmO3hjEkcQOViD7zmWyJPN2DLfwe3pRhSgNuzLEvkK3pLELkSB2obd8hX8CoOIArYYx7F4rsHNmMmFRIE7hO1yDd6TaSxLFLgtOSXX4Dv5mSgCy3Api+US/DGPEkWglCvYPGtwCe05lSgSl3BQ1uAl+I1tiSJxFudRmiV4Zb5ifaJInMqNtM0SvCbvsUKRBd9Lu6xr+CVWJorEuTzGwlmCl+VJ1iKKxHU8Tosswc24g42JIvEUt+dyHr6SXYgi8QUX5xJ8LEcRRaAVAzg0l+AtOJsoAvsxneVyCV6YM1mCKHAv05HIHgyHsC1R4MZwRT6C1+IwSokCdRSJFfIRXMb+rE4UqCF8TuQeDKuzOyVEnuzK2kSOjiCxXv6CYQfWIvJgfRJvETkoYzIvEvkOXpidaEfk6E4STxE5eIupVOQ/GFZiM8qIjMrpSuJqIqPjSOxA1E4wrM5alBAZHEJiDIcSGWxF4mKidoNhFYjI4CsSndmA+D9tTCV3EHUVXMKKrEw58T/agenM5AsWIQA4kwtoRgCwF2O5nKjDYGBJVqYl8T/4gmpm8jABwGEk3icAuJR+HEPUTzC0ZkUWIwhWZQ9O4DSO514mMpAJfMrmrE5r1mQ48ziQIFiOl3iP1Yj6DYYmVNCSd5jBZCqZTQ0z6U9fiOFMZhwDmMQYejOGtyllWY6kFVEgwUAr2pMgKplHDTMYRB+IMSRmM4tKRtKTcbxD82L49LCcrTmRm3iOh3iTkQxhBB9xGjuyHHswE+LghvK99BdUMo27CADOIPFZQwnen2pm8iWtCABO5kpaFX8wfEDiT1ZrDL8A7MN8RrNbYwguoxPzOKnhB8MNJB5oLMHbkPiwsQQ35Xr2JurSXwB+KiOnQkyNLQAAAABJRU5ErkJggg==')\n 50% 50% no-repeat; -webkit-animation-name: rotate; -webkit-animation-duration:2s; -webkit-animation-iteration-count:infinite; -webkit-animation-timing-function:linear; -moz-animation-name: rotate; -moz-animation-duration:2s; -moz-animation-iteration-count:infinite; -moz-animation-timing-function:linear; }\n @-webkit-keyframes rotate {\n from {-webkit-transform:rotate(0deg);}\n to { -webkit-transform:rotate(360deg);}\n }\n @-moz-keyframes rotate {\n from {-moz-transform:rotate(0deg);}\n to { -moz-transform:rotate(360deg);}\n }\n main.loading, body.loading { overflow: hidden }\n .loading .modalloading { display: block }\n .home-loading { display: none; position: fixed; top: 0; left: 0; height: 100%; width: 100%; background: #fff; z-index: 104400 }\n .home-loading .loading-header { height: 45px; background: #fff; box-shadow: 0 3px 3px rgba(0,0,0,0.12); position: absolute; top: 0; left: 0; right: 0; }\n .home-loading .loading-image { height: 0; overflow: hidden; margin-top: 45px; }\n\n .home-loading .loading-image div { height: 100%; width: 100vw; background: url(/assets/img/home/background_new_home.jpg) no-repeat 50% 50%/cover; box-sizing: border-box; border-bottom: solid 1px #ddd; }\n @media (min-width: 320px) { .home-loading .loading-image { height: 150px } }\n @media (min-width: 360px) { .home-loading .loading-image { height: 180px } }\n @media (max-height: 539px) { .home-loading .loading-image { height: 120px } }\n @media (max-height: 499px) { .home-loading .loading-image { display: none } }\n .ui-mobile-rendering > * { visibility: visible !important; }\n </style>\n <!-- Google Tag Manager -->\n <script>\n window.digitalData = {};\n window.dataLayer = window.dataLayer || [];\n (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\n new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\n j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\n 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n })(window,document,'script','dataLayer','GTM-56RKXM6');\n </script>\n <!-- End Google Tag Manager -->\n <script type=\"text/javascript\">var vuelingDataLayer = {};</script>\n <link rel=\"stylesheet\" href=\"styles.818ae3a4c9b3a569734c.css\">\n<script>(window.BOOMR_mq=window.BOOMR_mq||[]).push([\"addVar\",{\"rua.upush\":\"false\",\"rua.cpush\":\"true\",\"rua.upre\":\"true\",\"rua.cpre\":\"true\",\"rua.uprl\":\"false\",\"rua.cprl\":\"false\",\"rua.cprf\":\"false\",\"rua.trans\":\"SJ-4b401d5b-5b1b-414c-8a99-7db846cd7a40\",\"rua.cook\":\"false\",\"rua.ims\":\"false\",\"rua.ufprl\":\"false\",\"rua.cfprl\":\"false\",\"rua.isuxp\":\"false\",\"rua.texp\":\"norulematch\"}]);</script>\n <script>!function(e){var n=\"https://s.go-mpulse.net/boomerang/\";if(\"False\"==\"True\")e.BOOMR_config=e.BOOMR_config||{},e.BOOMR_config.PageParams=e.BOOMR_config.PageParams||{},e.BOOMR_config.PageParams.pci=!0,n=\"https://s2.go-mpulse.net/boomerang/\";if(window.BOOMR_API_key=\"84BWN-DSEXB-RYJ67-4N4JU-88Z7A\",function(){function e(){if(!o){var e=document.createElement(\"script\");e.id=\"boomr-scr-as\",e.src=window.BOOMR.url,e.async=!0,i.parentNode.appendChild(e),o=!0}}function t(e){o=!0;var n,t,a,r,d=document,O=window;if(window.BOOMR.snippetMethod=e?\"if\":\"i\",t=function(e,n){var t=d.createElement(\"script\");t.id=n||\"boomr-if-as\",t.src=window.BOOMR.url,BOOMR_lstart=(new Date).getTime(),e=e||d.body,e.appendChild(t)},!window.addEventListener&&window.attachEvent&&navigator.userAgent.match(/MSIE [67]\\./))return window.BOOMR.snippetMethod=\"s\",void t(i.parentNode,\"boomr-async\");a=document.createElement(\"IFRAME\"),a.src=\"about:blank\",a.title=\"\",a.role=\"presentation\",a.loading=\"eager\",r=(a.frameElement||a).style,r.width=0,r.height=0,r.border=0,r.display=\"none\",i.parentNode.appendChild(a);try{O=a.contentWindow,d=O.document.open()}catch(_){n=document.domain,a.src=\"javascript:var d=document.open();d.domain='\"+n+\"';void(0);\",O=a.contentWindow,d=O.document.open()}if(n)d._boomrl=function(){this.domain=n,t()},d.write(\"<bo\"+\"dy onload='document._boomrl();'>\");else if(O._boomrl=function(){t()},O.addEventListener)O.addEventListener(\"load\",O._boomrl,!1);else if(O.attachEvent)O.attachEvent(\"onload\",O._boomrl);d.close()}function a(e){window.BOOMR_onload=e&&e.timeStamp||(new Date).getTime()}if(!window.BOOMR||!window.BOOMR.version&&!window.BOOMR.snippetExecuted){window.BOOMR=window.BOOMR||{},window.BOOMR.snippetStart=(new Date).getTime(),window.BOOMR.snippetExecuted=!0,window.BOOMR.snippetVersion=12,window.BOOMR.url=n+\"84BWN-DSEXB-RYJ67-4N4JU-88Z7A\";var i=document.currentScript||document.getElementsByTagName(\"script\")[0],o=!1,r=document.createElement(\"link\");if(r.relList&&\"function\"==typeof r.relList.supports&&r.relList.supports(\"preload\")&&\"as\"in r)window.BOOMR.snippetMethod=\"p\",r.href=window.BOOMR.url,r.rel=\"preload\",r.as=\"script\",r.addEventListener(\"load\",e),r.addEventListener(\"error\",function(){t(!0)}),setTimeout(function(){if(!o)t(!0)},3e3),BOOMR_lstart=(new Date).getTime(),i.parentNode.appendChild(r);else t(!1);if(window.addEventListener)window.addEventListener(\"load\",a,!1);else if(window.attachEvent)window.attachEvent(\"onload\",a)}}(),\"\".length>0)if(e&&\"performance\"in e&&e.performance&&\"function\"==typeof e.performance.setResourceTimingBufferSize)e.performance.setResourceTimingBufferSize();!function(){if(BOOMR=e.BOOMR||{},BOOMR.plugins=BOOMR.plugins||{},!BOOMR.plugins.AK){var n=\"true\"==\"true\"?1:0,t=\"\",a=\"fuvsb4dip3rr2zarg63a-f-a2bbb1f94-clientnsv4-s.akamaihd.net\",i=\"false\"==\"true\"?2:1,o={\"ak.v\":\"34\",\"ak.cp\":\"421782\",\"ak.ai\":parseInt(\"265575\",10),\"ak.ol\":\"0\",\"ak.cr\":271,\"ak.ipv\":4,\"ak.proto\":\"h2\",\"ak.rid\":\"22f7c068\",\"ak.r\":37883,\"ak.a2\":n,\"ak.m\":\"dsce3\",\"ak.n\":\"essl\",\"ak.bpcip\":\"45.43.32.0\",\"ak.cport\":64533,\"ak.gh\":\"23.215.189.109\",\"ak.quicv\":\"\",\"ak.tlsv\":\"tls1.2\",\"ak.0rtt\":\"\",\"ak.csrc\":\"-\",\"ak.acc\":\"\",\"ak.t\":\"1678849974\",\"ak.ak\":\"hOBiQwZUYzCg5VSAfCLimQ==BA2bpsTykk4KQgnM9nu+Eb5JDHDvlMuNo3zf3NNFzksl6TMNrZ5VPf/YbdSPAUwswYoHZvJ9hWg/MIPI7ov+/Y97ZVJDrTeA1v2jk4a/Q+5aAdAU5/csQeZfFB4dl6oqu4IbPpXB1706yym8zPZcTe+fChAQONHZOZY2erN5a9vcrHoY/paWfyTpgXhfvy2kBsT2SCOw3HPbR+HXHTyfd5wVeckq88Q+dLCdX8jBNU0ODMfwz++egxXzznwTg4e5CoIcfDnbmgZHw9ppKvAMndnwWryM2vy43Ja2FDdWIEizuprjQlOTfhWAHakJ+q+ipmka4UgWWITxjJ0YrEq9y705DJOaIYrkaEe8MtClIJpXrpsdGkQTJ71YODlCesfEjact/GXRiqlofGQYl0r6sDpWXeedXx1XB6yNMeW/pb4=\",\"ak.pv\":\"38\",\"ak.dpoabenc\":\"\",\"ak.tf\":i};if(\"\"!==t)o[\"ak.ruds\"]=t;var r={i:!1,av:function(n){var t=\"http.initiator\";if(n&&(!n[t]||\"spa_hard\"===n[t]))o[\"ak.feo\"]=void 0!==e.aFeoApplied?1:0,BOOMR.addVar(o)},rv:function(){var e=[\"ak.bpcip\",\"ak.cport\",\"ak.cr\",\"ak.csrc\",\"ak.gh\",\"ak.ipv\",\"ak.m\",\"ak.n\",\"ak.ol\",\"ak.proto\",\"ak.quicv\",\"ak.tlsv\",\"ak.0rtt\",\"ak.r\",\"ak.acc\",\"ak.t\",\"ak.tf\"];BOOMR.removeVar(e)}};BOOMR.plugins.AK={akVars:o,akDNSPreFetchDomain:a,init:function(){if(!r.i){var e=BOOMR.subscribe;e(\"before_beacon\",r.av,null,null),e(\"onbeacon\",r.rv,null,null),r.i=!0}return this},is_complete:function(){return!0}}}}()}(window);</script></head>\n<body class=\"loading\">\n <!-- Google Tag Manager (noscript) -->\n <vy-app></vy-app>\n <noscript>\n <iframe src=\"https://www.googletagmanager.com/ns.html?id=GTM-56RKXM6\" title=\"tag-manager\"\n height=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"></iframe>\n </noscript>\n <noscript>\n <iframe\n src=\"https://www.googletagmanager.com/ns.html?id=GTM-56RKXM6\" title=\"gtm\" height=\"0\" width=\"0\" style=\"display:none;visibility:hidden\">\n </iframe>\n </noscript>\n <!-- End Google Tag Manager (noscript) -->\n <vy-app></vy-app>\n <div class=\"home-loading\">\n <div class=\"loading-header\"></div>\n <div class=\"loading-image\"><div></div></div>\n </div>\n <div class=\"modalloading\"></div>\n <script>\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', 'AW-1070364677');\n gtag('config', 'AW-807657239');\n </script>\n\n <!-- one trust integration C0004 marketing cookies class optanon-category-C0004 -->\n <script>\n window.Krux || ((Krux = function () { Krux.q.push(arguments) }).q = []);\n </script>\n <script class=\"kxct optanon-category-C0004\" data-id=\"tpvz7cmxh\" data-timing=\"async\" data-version=\"3.0\" type=\"text/plain\">\n (function() {\n function S4(){return(65536*(1+Math.random())|0).toString(16).substring(1)}\n function gen(){return\"VY-\"+(new Date).getTime()+\"-\"+(S4()+\"-\"+S4()).toLowerCase()}\n function getCookie(e){for(var n=e+\"=\",t=decodeURIComponent(document.cookie).split(\";\"),o=0;o<t.length;o++){for(var r=t[o];\" \"==r.charAt(0);)r=r.substring(1);if(0==r.indexOf(n))return r.substring(n.length,r.length)}return\"\"}\n function createSafariCookie(){var e=getCookie(\"kppid\");document.cookie=\"kppid=\"+(e||gen())}\n function loadKrux() {\n createSafariCookie();\n var k = document.createElement('script'); k.type = 'text/javascript'; k.async = true;\n k.src = (location.protocol === 'https:' ? 'https:' : 'http:') + '//cdn.krxd.net/controltag/tpvz7cmxh.js';\n var s = document.getElementsByTagName('script')[0];\n s.parentNode.insertBefore(k, s);\n }\n loadKrux();\n }());\n </script>\n <script src=\"assets/js/usabilla-dev.js\" defer=\"\"></script>\n <script type=\"text/javascript\">\n if (['/', '/Home', '/Home/Index'].indexOf(window.location.pathname) !== -1) {\n var divLoading = document.querySelectorAll(\"[class=modalloading]\");\n if (divLoading && divLoading.length === 1) {\n divLoading[0].style.display ='block';\n }\n }\n </script>\n<script data-ot-ignore src=\"runtime.fbf4fd4eeed9340ab559.js\" defer></script><script data-ot-ignore src=\"polyfills.ba70b94f8c2dc27ee9b6.js\" defer></script><script data-ot-ignore src=\"scripts.6c2a4d58350838519bc6.js\" defer></script><script data-ot-ignore src=\"main.7b6bba90e480a1bee27c.js\" defer></script><script type=\"text/javascript\" src=\"/a1vDK6HSP/J0i/5qV/-SKQHn4-MrzI/5OS7DJSXk1X9DE/TXZPMGgAJwM/QUcq/LBkRTSI\"></script></body>\n</html>\n")
//
//doc, err := goquery.NewDocumentFromReader(a)
//if err != nil {
// panic(err)
//}
//scripts := doc.Find("script")
//fmt.Println(scripts.Last().Attr("src"))
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment