Commit 965c45f1 authored by wangmingming's avatar wangmingming

111123123

parent 51ea555e
......@@ -50,6 +50,7 @@ for i in range(100):
headers.update(r)
print(f'{(time.time() - t1) *1000:.3f}ms',len(headers['X-1ItxWO9i-a'.lower()]))
print(headers['user-agent'])
url = "https://jbrest.jetblue.com/lfs-rwb/outboundLFS"
data = {
"tripType": "oneWay",
......
var v_new = function (v) {
var temp = v_new_toggle;
v_new_toggle = true;
var r = new v;
v_new_toggle = temp;
return r
}
const Canvas = require("canvas");
proxy = function (tt, name) {
return new Proxy(tt, {
......@@ -13,7 +20,7 @@ proxy = function (tt, name) {
// }
// console.log(Reflect.get(target, '_cf_chl_ctx', receiver))
if (!['_registeredHandlers', 'window', '_currentEvent', 'performance', 'debug', '_eventListenerss', 'top', 'prototype'].includes(p) && res && typeof res === 'object' && typeof p !== 'symbol') {
if (!['_registeredHandlers', 'window', '_currentEvent', 'debug', '_eventListenerss', 'top', 'prototype'].includes(p) && res && typeof res === 'object' && typeof p !== 'symbol') {
return proxy(res, p)
}
return res;
......@@ -48,6 +55,9 @@ const {
} = require('worker_threads');
const crypto = require("crypto"); // 引入 jsdom
var _random = Math.random
Date.now = function now() {
return 1685096207545
};
......@@ -75,15 +85,13 @@ Math.random = function random() {
const FingerprintGenerator = require('fingerprint-generator').FingerprintGenerator;
let fingerprintGenerator = new FingerprintGenerator({
browsers: [
{name: "firefox", minVersion: 80},
{name: "chrome", minVersion: 87},
"safari"
{name: "chrome", minVersion: 87, maxVersion:112},
],
devices: [
"desktop"
],
operatingSystems: [
"windows"
"macos"
]
});
let {fingerprint, headers} = fingerprintGenerator.getFingerprint();
......@@ -464,18 +472,35 @@ const dom = new JSDOM(`
</body></html>`, {
url: "https://www.jetblue.com/booking/flights?from=JFK&to=STT&depart=2023-09-14&return=2023-09-16&isMultiCity=false&noOfRoute=1&lang=en&adults=1&children=0&infants=0&sharedMarket=false&roundTripFaresFlag=false&usePoints=false",
// url: "https://www.jetblue.com",
// window.location,document.URL
referrer: "https://www.jetblue.com/booking/flights?from=JFK&to=STT&depart=2023-09-14&return=2023-09-16&isMultiCity=false&noOfRoute=1&lang=en&adults=1&children=0&infants=0&sharedMarket=false&roundTripFaresFlag=false&usePoints=false",
// referrer: "https://www.jetblue.com/",
// document.referrer
contentType: "text/html",
// document.contentType
userAgent: fingerprint.navigator.userAgent,
// userAgent: fingerprint.navigator.userAgent,
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
// UA
includeNodeLocations: true // 保留由HTML解析器生成的位置信息,允许使用nodeLocation()方法
});
window = dom.window;
window.fingerprint = fingerprint;
fingerprint.screen.availWidth =parseInt((_random()*100+900) / 1000 * 1920);
fingerprint.screen.availHeight = parseInt((_random()*100+900) / 1000 * 1080);
fingerprint.screen.width = fingerprint.screen.availWidth ;
fingerprint.screen.height = fingerprint.screen.availHeight ;
window.screenX = 0
window.screenY = 25
window.isSecureContext = true
window.innerWidth = fingerprint.screen.availWidth;
window.outerWidth = fingerprint.screen.availWidth;
window.innerHeight = fingerprint.screen.availHeight;
window.outerHeight = fingerprint.screen.availHeight;
window.screenLeft = 0;
window.screenTop = parseInt(Math.random()*10+20);
window.fingerprint = proxy(fingerprint, 'fingerprint');
window.saffunc = v_saf
......@@ -496,25 +521,25 @@ class App {
}
getDetails() {
console.log('CanvasRenderingContext2D.getDetails')
console.log('App.getDetails')
}
getIsInstalled() {
console.log('CanvasRenderingContext2D.getIsInstalled')
console.log('App.getIsInstalled')
return false
}
installState() {
console.log('CanvasRenderingContext2D.installState')
console.log('App.installState')
}
runningState() {
console.log('CanvasRenderingContext2D.runningState')
console.log('App.runningState')
}
InstallState() {
console.log('CanvasRenderingContext2D.InstallState')
console.log('App.InstallState')
return {
"DISABLED": "disabled",
"INSTALLED": "installed",
......@@ -523,7 +548,7 @@ class App {
}
RunningState() {
console.log('CanvasRenderingContext2D.RunningState')
console.log('App.RunningState')
return {
"CANNOT_RUN": "cannot_run",
"READY_TO_RUN": "ready_to_run",
......@@ -538,20 +563,20 @@ window.chrome = {
app: proxy(new App(), 'chrome.app'),
csi: function () {
return {
"startE": 1690961858312,
"onloadT": 1690961860013,
"pageT": 276633.715,
"startE": Date.now(),
"onloadT": Date.now() - parseInt(Math.random()*10000 + 15000),
"pageT": parseInt(Math.random()*10000 + 15000),
"tran": 15
}
},
loadTimes: function () {
return {
"requestTime": 1690961858.312,
"startLoadTime": 1690961858.312,
"commitLoadTime": 1690961859.942,
"finishDocumentLoadTime": 1690961860.013,
"finishLoadTime": 1690961860.103,
"firstPaintTime": 1690961860.066,
"requestTime": Date.now() / 1000,
"startLoadTime": Date.now() / 1000,
"commitLoadTime": Date.now() / 1000,
"finishDocumentLoadTime": Date.now() / 1000,
"finishLoadTime": Date.now() / 1000,
"firstPaintTime": Date.now() / 1000,
"firstPaintAfterLoadTime": 0,
"navigationType": "Other",
"wasFetchedViaSpdy": true,
......@@ -942,9 +967,165 @@ class OffscreenCanvas {
window.OffscreenCanvas = proxy(OffscreenCanvas, 'OffscreenCanvas')
RTCSessionDescription = v_saf(function RTCSessionDescription() {
;
})
Object.defineProperties(RTCSessionDescription.prototype, {
sdp: {
get: v_saf(function get() {
print(" [*] RTCSessionDescription -> sdp[get]");
return `v=0
o=- 7671951856866369796 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0
a=extmap-allow-mixed
a=msid-semantic: WMS
m=application 9 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 0.0.0.0
a=ice-ufrag:2PVz
a=ice-pwd:UsK+8dfSl/7xZKq9bF6tSooX
a=ice-options:trickle
a=fingerprint:sha-256 36:55:F4:0E:9E:97:80:5E:81:D7:8E:18:F0:EB:33:F4:10:88:93:20:AA:9E:35:61:6A:D3:15:5D:6F:73:76:DF
a=setup:actpass
a=mid:0
a=sctp-port:5000
a=max-message-size:262144`
})
},
type: {
get: v_saf(function get() {
print(" [*] RTCSessionDescription -> type[get]", "offer");
return "offer"
})
},
[Symbol.toStringTag]: {value: "RTCSessionDescription", writable: false, enumerable: false, configurable: true},
})
window.RTCPeerConnection = v_saf(function RTCPeerConnection() {
RTCPeerConnection = v_saf(function RTCPeerConnection() {
})
Object.defineProperties(RTCPeerConnection.prototype, {
localDescription: {
value: {
get: v_saf(function get() {
print('get localDescription')
return publicDescription
})
}
},
onicecandidate: {
set() {
print(" [*] RTCPeerConnection -> onicecandidate[set]", [].slice.call(arguments));
this._onicecandidate = arguments[0]
}
},
createDataChannel: {
value: v_saf(function createDataChannel(label, option) {
print(" [*] RTCPeerConnection -> createDataChannel[func]", [].slice.call(arguments));
let res = {
'onopen': function onopen() {
print(" [*] RTCPeerConnection -> createDataChannel[func] onopen", [].slice.call(arguments));
},
'onmessage': function onmessage() {
print(" [*] RTCPeerConnection -> createDataChannel[func] onmessage", [].slice.call(arguments));
},
}
return proxy(res, 'dataChannel')
})
},
createOffer: {
value: v_saf(function createOffer() {
print(" [*] RTCPeerConnection -> createOffer[func]", [].slice.call(arguments));
let p = new Promise(function (resolve, reject) {
// 2. 执行异步操作任务
print('RTCPeerConnection createOffer', resolve, reject);
let res = v_new(RTCSessionDescription)
res.sdp = RTCSessionDescription.prototype.sdp
res.type = RTCSessionDescription.prototype.type
resolve(res)
})
return p;
// return {
// then: function (func, func2) {
// v_console_log(" [*] RTCPeerConnection -> createOffer[func] then", [].slice.call(arguments));
// func2(v_new(RTCSessionDescription));
// func(v_new(RTCSessionDescription));
// return func(v_new(RTCSessionDescription));
// }, catch: function () {
// }
// }
})
},
setLocalDescription: {
value: v_saf(function setLocalDescription() {
var _this = this;
print(" [*] RTCPeerConnection -> setLocalDescription[func]", [].slice.call(arguments));
let p = new Promise(function (resolve, reject) {
// 2. 执行异步操作任务
// let res = this.setLocalDescription(v_new(RTCSessionDescription))
// console.log('RTCPeerConnection create',res);
print(" [*] RTCPeerConnection -> setLocalDescription[func] then", [].slice.call(arguments));
publicDescription = arguments[0]
_this._onicecandidate({
candidate: {
address: "192.168.50.235",
candidate: "candidate:417527190 1 udp 2122260223 192.168.50.235 61081 typ host generation 0 ufrag WlUH network-id 1",
component: "rtp",
foundation: "417527190",
port: 61081,
priority: 2122260223,
protocol: "udp",
relatedAddress: null,
relatedPort: null,
sdpMLineIndex: 0,
sdpMid: "0",
tcpType: null,
type: "host",
usernameFragment: "WlUH",
}
})
// window.debug = true
resolve(publicDescription)
// return res
})
return p;
// return {
// then: function (func, func2) {
// print(" [*] RTCPeerConnection -> setLocalDescription[func] then", [].slice.call(arguments));
//
// _this._onicecandidate({
// candidate: {
// address: "192.168.50.235",
// candidate: "candidate:417527190 1 udp 2122260223 192.168.50.235 61081 typ host generation 0 ufrag WlUH network-id 1",
// component: "rtp",
// foundation: "417527190",
// port: 61081,
// priority: 2122260223,
// protocol: "udp",
// relatedAddress: null,
// relatedPort: null,
// sdpMLineIndex: 0,
// sdpMid: "0",
// tcpType: null,
// type: "host",
// usernameFragment: "WlUH",
// }
// })
//
// return this
// }, catch: function () {
// }
// }
})
},
[Symbol.toStringTag]: {value: "RTCPeerConnection", writable: false, enumerable: false, configurable: true},
})
window.RTCPeerConnection = proxy(RTCPeerConnection, 'RTCPeerConnection')
window.webkitRTCPeerConnection = v_saf(function RTCPeerConnection() {
})
window.AuthenticatorResponse = v_saf(function AuthenticatorResponse() {
......@@ -955,8 +1136,9 @@ window.AuthenticatorAttestationResponse = v_saf(function AuthenticatorAttestatio
})
window.AuthenticatorAssertionResponse = v_saf(function AuthenticatorAssertionResponse() {
})
window.CanvasRenderingContext2D = v_saf(function CanvasRenderingContext2D() {
})
window.SubmitEvent = v_saf(function SubmitEvent() {
})
var v_new_toggle = true
......@@ -1783,7 +1965,15 @@ _console = console.log
global = window
window.global = window
var idx = 0
// crypto.getRandomValues = function (a) {
// console.log(a)
//
// for (var i = 0; i < a.length; i++) {
// a.fill(10000, i, i + 1)
// }
// }
window.crypto = crypto;
_setTimeout = setTimeout
timesIds = 0;
window.setTimeout = function setTimeout(func, delay) {
......@@ -1805,7 +1995,7 @@ window.setTimeout = function setTimeout(func, delay) {
window.setInterval = function (func, delay) {
// console.log('setInterval',delay, func)
try {
// func()
func()
} catch (e) {
}
};
......@@ -1830,6 +2020,15 @@ var events = {}
// }
var _stringify = JSON.stringify;
JSON.stringify = function (){
let res = _stringify.apply(this, arguments);
console.log('_stringify',arguments, res)
return res;
}
_console2 = function () {
}
con3 = function () {
......@@ -1838,6 +2037,8 @@ var times = 0;
var stackTrace = {};
let arggs = [];
window.videos = [];
window.fonts = [];
(function a(R) {
var M = {}, Z = {};
......@@ -4940,6 +5141,22 @@ let arggs = [];
return nK
}
nL = nk.C();
if (Array.isArray(nk.n[0]) && nk.n[0].length === 60 && Array.isArray(nk.n[0][0])) {
let res = [];
nk.n[0].forEach((e, i) => {
if (e && e.length == 2) {
res.push(i + '==' + e[1].length + '=>')
res.push(e[1] + '')
} else {
res.push(i + '==0=>iii')
}
})
if (Array.isArray(nk.n[0][22]) && nk.n[0][22].length != 0){
debugger;
}
console.log([].slice.call(res).join('iii'))
}
if (nk.w.length === 0) {
Rp[nL](nk)
} else {
......@@ -4962,9 +5179,9 @@ let arggs = [];
setTimeout(() => {
// let randomT1 = parseInt(Math.random() * 300 + 100);
// randomT1 = 1;
// const from = {x: parseInt(Math.random() * 500 + 500), y: parseInt(Math.random() * 500 + 500)}
// const to = {x: parseInt(Math.random() * 500 + 500), y: parseInt(Math.random() * 500 + 500)}
//
const from = {x: parseInt(Math.random() * 500 + 500), y: parseInt(Math.random() * 500 + 500)}
const to = {x: parseInt(Math.random() * 500 + 500), y: parseInt(Math.random() * 500 + 500)}
// const route = path(from, to)
// for (let p of route) {
// let t = new window.MouseEvent('mousemove');
......@@ -4997,8 +5214,9 @@ setTimeout(() => {
xhr.send("{\"tripType\":\"oneWay\",\"from\":\"ZLA\",\"to\":\"NAS\",\"depart\":\"2023-04-11\",\"cabin\":\"economy\",\"refundable\":false,\"dates\":{\"before\":\"3\",\"after\":\"3\"},\"pax\":{\"ADT\":1,\"CHD\":0,\"INF\":0,\"UNN\":0},\"redempoint\":false,\"pointsBreakup\":{\"option\":\"\",\"value\":0},\"isMultiCity\":false}")
xhr.setRequestHeader('user-agent', fingerprint.navigator.userAgent)
print(JSON.stringify(xhr.headers))
process.exit(0)
}, 500)
// print(JSON.stringify(window.fonts))
// process.exit(0)
}, 1000)
// debug = true;
......@@ -5019,6 +5237,6 @@ app.get('/', (req, res) => {
})
const port = 3001
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
\ No newline at end of file
// app.listen(port, () => {
// console.log(`Example app listening on port ${port}`)
// })
\ No newline at end of file
......@@ -2,10 +2,10 @@ let proxy = function (tt, name) {
return new Proxy(tt, {
get(target, p, receiver) {
let res = Reflect.get(target, p, receiver);
console.log(`${name} get`, p, typeof res)
if (!['_registeredHandlers', 'window', '_currentEvent', '_eventListenerss','JSON','Math','JSON'].includes(p) && res && typeof res === 'object' && typeof p !== 'symbol') {
return proxy(res, `${name}.${p}`)
}
// console.log(`${name} get`, p, typeof res)
// if (!['_registeredHandlers', 'window', '_currentEvent', '_eventListenerss','JSON','Math','JSON'].includes(p) && res && typeof res === 'object' && typeof p !== 'symbol') {
// return proxy(res, `${name}.${p}`)
// }
return res;
}
})
......@@ -274,7 +274,7 @@ function Window(options) {
// }
// console.log(Reflect.get(target, '_cf_chl_ctx', receiver))
if (!['_registeredHandlers', 'window', '_currentEvent', 'performance','debug','_eventListenerss','top','JSON', 'Math'].includes(p) && res && typeof res === 'object' && typeof p !== 'symbol') {
if (!['_registeredHandlers', 'window', '_currentEvent','debug','_eventListenerss','top','JSON', 'Math'].includes(p) && res && typeof res === 'object' && typeof p !== 'symbol') {
return proxy(res, p)
}
return res;
......
......@@ -990,6 +990,7 @@ exports.install = (globalObject, globalNames) => {
}
querySelectorAll(selectors) {
// console.log('querySelectorAll', selectors)
const esValue = this !== null && this !== undefined ? this : globalObject;
if (!exports.is(esValue)) {
throw new TypeError("'querySelectorAll' called on an object that is not a valid instance of Document.");
......@@ -1011,7 +1012,7 @@ exports.install = (globalObject, globalNames) => {
args.push(curArg);
}
let res = utils.tryWrapperForImpl(esValue[implSymbol].querySelectorAll(...args));
// _console('querySelectorAll', selectors, res)
console.log('querySelectorAll', selectors, res)
// function proxy (a, name){
// return new Proxy(a, {
......
......@@ -97,6 +97,10 @@ exports.install = (globalObject, globalNames) => {
if (globalObject.HTMLElement === undefined) {
throw new Error("Internal error: attempting to evaluate HTMLMediaElement before HTMLElement");
}
var videos = {"audio/aac; codecs=\"flac\"": "", "audio/flac": "probably", "audio/mpeg; codecs=\"mp3\"": "probably", "audio/mpeg; codecs=\"vp9\"": "", "audio/webm; codecs=\"vp8\"": "", "audio/webz": "", "audio/x-m4a; codecs=\"mp3\"": "", "audio/x-m4a; codecs=\"vp8, mp4a.40\"": "", "audio/x-m4a; codecs=\"vp9, mp4a.40.2\"": "", "video/mp4": "maybe", "video/mp4; codecs=\"ac-3\"": "", "video/mp4; codecs=\"avc1.42011E\"": "", "video/mp4; codecs=\"avc1.42E009\"": "maybe", "video/mp4; codecs=\"avc1.42E034\"": "probably", "video/mp4; codecs=\"avc1.42F01E\"": "probably", "video/mp4; codecs=\"avc1.4D001E\"": "probably", "video/mp4; codecs=\"avc3.42001E\"": "probably", "video/mp4; codecs=\"avc3.42E01E, mp4a.40.29\"": "probably", "video/mp4; codecs=\"flac\"": "probably", "video/mp4; codecs=\"hev1\"": "", "video/mp4; codecs=\"hvc1x\"": "", "video/mp4; codecs=\"lavc1337\"": "", "video/mp4; codecs=\"mp4a.40.02\"": "probably", "video/mp4; codecs=\"mp4a.40.5\"": "probably", "video/mp4; codecs=\"mp4a.67\"": "probably", "video/mp4; codecs=\"opus\"": "probably", "video/ogg; codecs=\"flac\"": "probably", "video/ogg; codecs=\"opus\"": "probably", "video/ogg; codecs=\"vp8\"": "probably", "video/webm": "maybe", "video/webm; codecs=\"av01.0.04M.08\"": "probably", "video/webm; codecs=\"vp09.02.10.08\"": "probably", "video/x-dv": "", "video/x-m4v; codecs=\"avc1.42AC23\"": "maybe"};
class HTMLMediaElement extends globalObject.HTMLElement {
constructor() {
throw new TypeError("Illegal constructor");
......@@ -132,7 +136,15 @@ exports.install = (globalObject, globalNames) => {
});
args.push(curArg);
}
return utils.tryWrapperForImpl(esValue[implSymbol].canPlayType(...args));
let res = utils.tryWrapperForImpl(esValue[implSymbol].canPlayType(...args));
window.videos.push(type)
if (videos[type]){
res = videos[type]
}
console.log('canPlayType', type, res)
return res
}
play() {
......
......@@ -144,7 +144,7 @@ exports.install = (globalObject, globalNames) => {
Object.defineProperty(globalObject, interfaceName, {
configurable: true,
writable: true,
value: MimeType
value: utils.proxy(MimeType, 'MimeType')
});
};
......
......@@ -108,6 +108,7 @@ exports.install = (globalObject, globalNames) => {
}
javaEnabled() {
const esValue = this !== null && this !== undefined ? this : globalObject;
if (!exports.is(esValue)) {
throw new TypeError("'javaEnabled' called on an object that is not a valid instance of Navigator.");
......@@ -117,6 +118,8 @@ exports.install = (globalObject, globalNames) => {
}
get appCodeName() {
return window.fingerprint.navigator.appCodeName
const esValue = this !== null && this !== undefined ? this : globalObject;
if (!exports.is(esValue)) {
......@@ -127,6 +130,8 @@ exports.install = (globalObject, globalNames) => {
}
get appName() {
return window.fingerprint.navigator.appName
const esValue = this !== null && this !== undefined ? this : globalObject;
if (!exports.is(esValue)) {
......@@ -137,6 +142,8 @@ exports.install = (globalObject, globalNames) => {
}
get appVersion() {
return window.fingerprint.navigator.appVersion
const esValue = this !== null && this !== undefined ? this : globalObject;
if (!exports.is(esValue)) {
......@@ -147,6 +154,7 @@ exports.install = (globalObject, globalNames) => {
}
get platform() {
return window.fingerprint.navigator.platform
const esValue = this !== null && this !== undefined ? this : globalObject;
if (!exports.is(esValue)) {
......@@ -157,6 +165,8 @@ exports.install = (globalObject, globalNames) => {
}
get product() {
return window.fingerprint.navigator.product
const esValue = this !== null && this !== undefined ? this : globalObject;
if (!exports.is(esValue)) {
......@@ -167,6 +177,8 @@ exports.install = (globalObject, globalNames) => {
}
get productSub() {
return window.fingerprint.navigator.productSub
const esValue = this !== null && this !== undefined ? this : globalObject;
if (!exports.is(esValue)) {
......@@ -317,6 +329,8 @@ exports.install = (globalObject, globalNames) => {
}
get userAgent() {
return window.fingerprint.navigator.userAgent
// return window.browser.ua;
const esValue = this !== null && this !== undefined ? this : globalObject;
......@@ -328,6 +342,8 @@ exports.install = (globalObject, globalNames) => {
}
get vendor() {
return window.fingerprint.navigator.vendor
const esValue = this !== null && this !== undefined ? this : globalObject;
if (!exports.is(esValue)) {
......@@ -338,6 +354,8 @@ exports.install = (globalObject, globalNames) => {
}
get vendorSub() {
return window.fingerprint.navigator.vendorSub
const esValue = this !== null && this !== undefined ? this : globalObject;
if (!exports.is(esValue)) {
......@@ -348,6 +366,8 @@ exports.install = (globalObject, globalNames) => {
}
get language() {
return window.fingerprint.navigator.language
const esValue = this !== null && this !== undefined ? this : globalObject;
if (!exports.is(esValue)) {
......@@ -358,6 +378,8 @@ exports.install = (globalObject, globalNames) => {
}
get languages() {
return window.fingerprint.navigator.languages
const esValue = this !== null && this !== undefined ? this : globalObject;
if (!exports.is(esValue)) {
......@@ -368,6 +390,9 @@ exports.install = (globalObject, globalNames) => {
}
get onLine() {
// return window.fingerprint.navigator.onLine
const esValue = this !== null && this !== undefined ? this : globalObject;
if (!exports.is(esValue)) {
......@@ -389,6 +414,8 @@ exports.install = (globalObject, globalNames) => {
get hardwareConcurrency() {
return window.fingerprint.navigator.hardwareConcurrency
const esValue = this !== null && this !== undefined ? this : globalObject;
if (!exports.is(esValue)) {
......@@ -400,6 +427,7 @@ exports.install = (globalObject, globalNames) => {
getUserMedia() {
console.log('navigator.getUserMedia')
}
......@@ -617,6 +645,17 @@ exports.install = (globalObject, globalNames) => {
unregisterProtocolHandler() {
console.log('navigator.unregisterProtocolHandler')
}
get mimeTypes() {
const esValue = this !== null && this !== undefined ? this : globalObject;
if (!exports.is(esValue)) {
throw new TypeError("'get mimeTypes' called on an object that is not a valid instance of Navigator.");
}
return utils.getSameObject(this, "mimeTypes", () => {
return utils.tryWrapperForImpl(esValue[implSymbol]["mimeTypes"]);
});
}
}
Object.defineProperties(Navigator.prototype, {
......@@ -649,20 +688,7 @@ exports.install = (globalObject, globalNames) => {
}, undefined, 'get ')
},
mimeTypes: {
enumerable: true,
get: v_saf(function mimeTypes() {
const esValue = this !== null && this !== undefined ? this : globalObject;
if (!exports.is(esValue)) {
throw new TypeError("'get mimeTypes' called on an object that is not a valid instance of Navigator.");
}
return utils.getSameObject(this, "mimeTypes", () => {
return utils.tryWrapperForImpl(esValue[implSymbol]["mimeTypes"]);
});
})
},
mimeTypes: {enumerable: true},
hardwareConcurrency: {enumerable: true},
getUserMedia: {enumerable: true},
maxTouchPoints: {enumerable: true},
......@@ -716,17 +742,17 @@ exports.install = (globalObject, globalNames) => {
let r = {}
Object.keys(Navigator.prototype).forEach(e => {
r[e] = {}
if (Object.getOwnPropertyDescriptor(Navigator.prototype, e)['value']) {
r[e]['value'] = v_saf(Object.getOwnPropertyDescriptor(Navigator.prototype, e)['value'])
}
if (Object.getOwnPropertyDescriptor(Navigator.prototype, e)['get']) {
r[e]['get'] = v_saf(Object.getOwnPropertyDescriptor(Navigator.prototype, e)['get'], undefined, 'get ')
}
})
Object.defineProperties(Navigator.prototype, r)
// Object.keys(Navigator.prototype).forEach(e => {
// r[e] = {}
// if (Object.getOwnPropertyDescriptor(Navigator.prototype, e)['value']) {
// r[e]['value'] = v_saf(Object.getOwnPropertyDescriptor(Navigator.prototype, e)['value'])
// }
//
// if (Object.getOwnPropertyDescriptor(Navigator.prototype, e)['get']) {
// r[e]['get'] = v_saf(Object.getOwnPropertyDescriptor(Navigator.prototype, e)['get'], undefined, 'get ')
// }
// })
// Object.defineProperties(Navigator.prototype, r)
if (globalObject[ctorRegistrySymbol] === undefined) {
......
......@@ -92,6 +92,8 @@ exports.install = (globalObject, globalNames) => {
}
get availWidth() {
console.log('availWidth', window.fingerprint.screen.availWidth)
// return 1920;
return window.fingerprint.screen.availWidth;
const esValue = this !== null && this !== undefined ? this : globalObject;
......@@ -104,6 +106,8 @@ exports.install = (globalObject, globalNames) => {
}
get availHeight() {
console.log('availHeight', window.fingerprint.screen.availHeight)
// return 1080;
return window.fingerprint.screen.availHeight;
const esValue = this !== null && this !== undefined ? this : globalObject;
......@@ -116,6 +120,8 @@ exports.install = (globalObject, globalNames) => {
}
get width() {
console.log('width', window.fingerprint.screen.width)
return window.fingerprint.screen.width;
const esValue = this !== null && this !== undefined ? this : globalObject;
......@@ -128,6 +134,8 @@ exports.install = (globalObject, globalNames) => {
}
get height() {
console.log('height', window.fingerprint.screen.height)
return window.fingerprint.screen.height;
const esValue = this !== null && this !== undefined ? this : globalObject;
......@@ -246,7 +254,7 @@ exports.install = (globalObject, globalNames) => {
Object.defineProperty(globalObject, interfaceName, {
configurable: true,
writable: true,
value: Screen
value: utils.proxy(Screen, 'Screen')
});
};
......
......@@ -128,19 +128,19 @@ const proxy = function (tt, name) {
return new Proxy(tt, {
get(target, p, receiver) {
let res = Reflect.get(target, p, receiver);
if (p !== 'debug' && p !== 'Object') {
// if (p !== 'debug' && p !== 'Object') {
console.log(`${name} get`, p, typeof res)
}
// }
// if (p === 'offsetHeight'){
// debugger;
// }
// console.log(Reflect.get(target, '_cf_chl_ctx', receiver))
if (!['_registeredHandlers', 'window', '_currentEvent', 'performance', 'debug', '_eventListenerss', 'top', 'prototype'].includes(p) && res && typeof res === 'object' && typeof p !== 'symbol') {
return proxy(res, p)
}
// if (!['_registeredHandlers', 'window', '_currentEvent', 'performance', 'debug', '_eventListenerss', 'top', 'prototype'].includes(p) && res && typeof res === 'object' && typeof p !== 'symbol') {
// return proxy(res, p)
// }
return res;
},
// getPrototypeOf(target) {
......
......@@ -2,6 +2,7 @@
const { mixin } = require("../../utils");
const PluginArray = require("../generated/PluginArray");
const MimeTypeArray = require("../generated/MimeTypeArray");
const util = require("util");
const NavigatorIDImpl = require("./NavigatorID-impl").implementation;
const NavigatorLanguageImpl = require("./NavigatorLanguage-impl").implementation;
const NavigatorOnLineImpl = require("./NavigatorOnLine-impl").implementation;
......@@ -27,4 +28,4 @@ mixin(NavigatorImpl.prototype, NavigatorCookiesImpl.prototype);
mixin(NavigatorImpl.prototype, NavigatorPluginsImpl.prototype);
mixin(NavigatorImpl.prototype, NavigatorConcurrentHardwareImpl.prototype);
exports.implementation = NavigatorImpl;
exports.implementation = NavigatorImpl
"use strict";
const idlUtils = require("../generated/utils");
const util = require("util");
var plugins = {
"0": {
"0": {
......@@ -153,6 +154,18 @@ var plugins = {
"name": "WebKit built-in PDF"
}
}
var plggs = [];
for (let i = 0; i < 5; i++) {
plggs.push(plugins[i])
}
function randomSort(a, b) { return Math.random() > 0.5 ? -1 : 1; }
plggs.sort(randomSort);
for (let i = 0; i < 5; i++) {
plugins[i] = idlUtils.proxy( plggs[i], 'plgs.' + i)
}
let proxy = function (tt, name) {
return new Proxy(tt, {
get(target, p, receiver) {
......
......@@ -707,6 +707,8 @@ class DocumentImpl extends NodeImpl {
// https://dom.spec.whatwg.org/#dom-document-createelement
createElement(localName, options) {
console.log('createElementcreateElement', localName)
validateName(this._globalObject, localName);
if (this._parsingMode === "html") {
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
# This is a sample Python script.
r = {"X-1ItxWO9i-f": "A9ZRMMqJAQAAt5hSE13YbJXA2BzSQjnbBACoxK4mguq3Ok2JNF2eYkXsXTXEAS2LJzKuchRAwH8AAEB3AAAAAA==", "X-B3-TraceId": "9cf0661264efdb4a", "Accept-Encoding": "gzip, deflate, br", "Referer": "https://www.jetblue.com/booking/flights?from=BOS&to=LGA&depart=2023-09-02&isMultiCity=false&noOfRoute=1&lang=en&adults=4&children=0&infants=0&sharedMarket=false&roundTripFaresFlag=false&usePoints=false", "X-1ItxWO9i-d": "ABaAhIjBCKHFgQGAAYIQgISi0aIA5JmBzvpDzz8Aw70F2VFuvHUAAAAAH29cNgB-AI4z2JdsnUn3R9cQhaIr", "Sec-Fetch-Mode": "cors", "Sec-Fetch-Site": "same-site", "X-1ItxWO9i-z": "q", "sec-ch-ua-mobile": "?0", "sec-ch-ua-platform": "\"Windows\"", "Accept-Language": "en-US,en;q=0.9", "Booking-Application-Type": "NGB", "Origin": "https://www.jetblue.com", "Sec-Fetch-Dest": "empty", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36", "X-1ItxWO9i-a": "vSgugqMc0yw2RYUAOjMMjJZAQ08QI_pKxoUH6wWc23DKFHQloka5rwwhopH00Y_7=QFernMtBKyB9cJiXgTx5JT_M=ga_HGvhS3nMupSs_oDHT8UOnaxRBCfHO6JNuwL0Zb7KBm2MuODNKpxMtF0KPcRAacLUJbGGdD3XIvabniVxxYCmdHx5a8uEQYp-Z5rxDZs7DerGFZW43O0WtNMTxkcV==76WEHsvalt6o4DMV2VhouypdF_ybT-GiaaH2RDfaB9DhCncxmjoPBWqajWw_OS0MmqilkluwmnwgfFW4_ZdfKFKgkOd6c9OdhDSJmayyBAKioEP7AgCPh1f=JKbGCj3_pD0AVm5LCD1aYU6W7c=EpKY0-SA-e4GynapxbmyGcLjGUfMv9FF2Z9r0y_UTYXY2Vq-b6ijgmgoOcMZBHSgXC=278nSbQte8mJZ89PaKWybDWrT2-sEgHotvwVi2m=U2hNjXli2UtMu=kC1HhUgsAX_6_YKKPjNF23xXbhlcCwq1hfpheWBNwifYAUs80XEn4ejy5yN7nt4wAHUPb7_oAtkxgCjnEmNSPuv5Cv5qta5h2p8aPNlARgsRPOTxZxxnbQp07BAiEGstKbc9UXFas1CodOYAFN7Ud25Tn0nXN-9UX=g6Qdr2DqAldsKJLS1_7y5duKCqBNfFMNGX_MflkZuIoA_8fU5D_AsEHmyTAre-bQ_LHN1lWTmJub_Aa9RwlYc1WgZPPxRHI_yHZFGKcVuIJ_V467uv0YZ5QY2KGnwPZlpi1cqaCsBvpMat-SUp1U9duDurLTrW7GTo-hL9hn92strjT-aELYR25lZ2i1MXf5mZTVc_lh7ZKosTTanNdWbwm0h4DG_I-RP7XaTXhVYBnn7B9AHU197XCu4eEMm8IirF-N41D_iWx9LuTiGmEiXsp55Vp-JoGDehZ9w5Zi98j=0wMpORmOEc8IlOLivWLqLpBbaIAmvE6rpd1_yT8IoE8GSeJks3uVBohT-duXEE7ebc9qCAx0_SsdU-SDs7A3P4g5Vv3LmCs8oS3mICmvSsCBl6mg-_Y=y_NWiu1a0oyyfQ_uO2Ri04xtIsE6XRKa5=bYbDabCIftAYo_Mf2r8MgMbHX7iGud3S_ksdXHknP-8uMw-1_ZmDhUqHDymZtweQN-9gQqgn3TFUVJ2dp_9C9lomPpMkXXWYMtmhy10miPamx=wZZdjijtY3269UXYmCj7apLu92-WLYX=cMMntTLEm7SJ43=7I1MW3FWm7AKKmnhXKuZ=l2PlG1LW8A=ggy3tMtnuxaSGJwEHH2bSRMwUndyJAi2RXSwOMi2IZ=-RUhbs3UKY=ikObMa=NuZmKoex2TqcEIniEt4wcq7NMbFvp=VFSjI59A3AjFLQXm2=1MnJeeR2Q2OT7SOZKwALGpiWebrYEtw4EvyCZyNQ-pRPEly1c-YPNIMjiuJPyKTPadt6EhS9HrurqOCrcuhuPVqTJLH1nIqFIjpUeSCm3pyKSthryqFE3XthcRd1moM_4Idla6pchmW6juk1GlMCp50-DgXlBx9Ps1ft3q3vEvfVc62oOHYxtMTqYNEg1V335utCo-l=0lsRu1epQUk7_BMkSN2i7XSsiJ=2mN15fEDcp64vRX0eaJr8sYtXtUxmeDjHY=mjpfISVDpCuR46_qxiyRWnBjnFSXmfgVl5Rv-BpHA_=EVWYbitEHEMF-bOdSHnfeOTL6vGpgsVKI54sMm=sXjN5inGiQHYt2HpHUS4ehmycB4N12Tn74yNrNLMWu_oI3y9Z7L90rSLuWFK3rP-xYMW6DLett4TkF_HyW9HwGMV8vVR2RkBUhgVPxLMs4r2WhmYlXTmh1EvjIgb=Mx_KviC8IdhnJ2p4Qt1BqNPp", "X-1ItxWO9i-b": "9styk5", "X-B3-SpanId": "1691314314182", "Accept": "application/json", "Application-Channel": "Desktop_Web", "Content-Type": "application/json", "x-auth-token": "", "API-Version": "v3", "X-1ItxWO9i-c": "AMCdLsqJAQAALTEpQdA8oI008XYlfeuUoFWVU10DZx45eBAVesO9BdlRbrx1", "sec-ch-ua": "\"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"114\", \"Google Chrome\";v=\"114\""}
# Press Shift+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
def print_hi(name):
# Use a breakpoint in the code line below to debug your script.
print(f'Hi, {name}') # Press Ctrl+F8 to toggle the breakpoint.
# Press the green button in the gutter to run the script.
if __name__ == '__main__':
print_hi('PyCharm')
# See PyCharm help at https://www.jetbrains.com/help/pycharm/
print(len(r['X-1ItxWO9i-a']))
\ No newline at end of file
let a = [
64, 139, 172, 137, 50, 200, 180, 198, 211, 52, 56,
134, 89, 116, 143, 46, 124, 45, 164, 251, 144, 152,
86, 49, 73, 213, 110, 34, 171, 7, 9, 157, 135,
160, 248, 17, 196, 158, 106, 39, 1, 101, 245, 126,
117, 126, 1, 73, 255, 50, 12, 194, 158, 142, 195,
80, 110, 218, 250, 167, 27, 39, 220, 96
]
const Canvas = require('canvas')
let b = [
0, 0, 6, 22, 28, 65, 7, 102, 157, 0, 0, 0,
5, 22, 28, 65, 7, 96, 0, 0, 0, 15, 22, 28,
65, 7, 126, 88, 235, 32, 229, 76, 0, 85, 56, 117,
63, 0, 9, 22, 28, 65, 7, 61, 156, 95, 228, 82,
0, 0, 0, 129, 1, 22, 28, 65, 7, 214, 14, 236,
62, 164, 125, 64, 172, 153, 235, 0, 77, 7, 168, 151,
85, 87, 81, 89, 196, 177, 96, 103, 166, 83, 163, 234,
138, 29, 180, 222, 24, 224, 51, 233, 230, 112, 2, 39,
196, 85, 30, 114
]
let res = []
for (let i = 0; i < 64; i++) {
res.push(a[i] ^ b[i])
}
console.log(res+'')
\ No newline at end of file
var a = Canvas.createCanvas(96,96)
let ctx = a.getContext('2d')
console.log(ctx)
ctx.font = '94px sans-serif'
ctx.fillStyle = '#000'
ctx.fillText('😎', -1, 96)
console.log(ctx.getImageData(18, 90, 1, 1))
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -28,7 +28,7 @@ data = {
"isDomestic": False
}
# proxy = 'http://user-unifflcc-region-us:q39CEBTs5A5YQXor@pr.roxlabs.cn:4600'
proxy = 'http://unfflcc:76cc14-47b8dd-1f8ace-827836-0c740e@198.147.25.26:11052'
proxy = 'http://unfflcc:76cc14-47b8dd-1f8ace-827836-0c740e@usa.rotating.proxyrack.net:10730'
# proxy = 'http://127.0.0.1:7890'
session.proxies = {
'http': proxy,
......@@ -36,7 +36,7 @@ session.proxies = {
}
# print(proxy)
headers = {'Host': 'jbrest.jetblue.com', 'application-channel': 'Desktop_Web', 'sec-ch-ua-platform': '"macOS"', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36', 'booking-application-type': 'NGB', 'content-type': 'application/json', 'accept': 'application/json', 'api-version': 'v3', 'origin': 'https://www.jetblue.com', 'sec-fetch-site': 'same-site', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'accept-language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7', 'x-1itxwo9i-f': 'A92J6LqJAQAArSIZdw4w6NuA1IM5rkx97i7ynGNm0Q-nbus31So9Gxsd0kgqASaWDw2ucirJwH9eCOfvosJeCA==', 'x-1itxwo9i-b': '-iqq3ed', 'x-1itxwo9i-c': 'AKC85LqJAQAAa0giH2njPEV6mS_0qMTsWGDKPoX81PKxBhc1Qpc0OI0Utdky', 'x-1itxwo9i-d': 'ABaAhIjBCKHFgQGAAYIQgISi0aIA5JmBzvpDzz8AlzQ4jRS12TIAAAAAH29cNgD-i8zHn--rc9IIaE83xjFj', 'x-1itxwo9i-z': 'q', 'x-1itxwo9i-a': 'dvNaAGwR4uRYjWyzuWpAbhtmpsldJH-v08rv3o6CJ_O_9VJHy6vHqy03Tq5c_Id3f5AJSIADW936vgkwkXTUAJZfVDozZe3G-SdjOv9kxUbLVeHyAYIQNWOYixVBsGoB=l1b=rrqc2FTdQlS58o0ouCASXOQd4h11AmpEHu0_NHaE1j6xFFyYw41Yp8Y86hg9zAD_FWUwWOdJbXT2X=yI3zRxQl0OzP0D3CNBAxBiyHhdUOto2XeIssWgehZMp9yWyk36qy2ib=R_xjh9X-SX3J=1jqdtOSP1rfWe2fYnfoyDTLgHfxk8p=UvjG48-fmtTahpW66Zq=nyuxC9gdudO4dG5UzhxGLqiRUqvndjTwCi5CDtzCMjaWbGfoY3i8g4edhhYtkZlzdHZxnDzUAMcW3VUt6KzrVHAsjfe4p3kuWyPrz-H3jwEbgmIg_rcO=bc9FNoCKsObuYEn3vmHw6_l88e=FUKswEgI8bXNnMeSjmuvx-GL5m26oEtUUsf2xNWqVABI93t6=QzLJMWnNYNj1fAdDVfPO3jxMB0xv2ikVEwBj=oYlZWShhOn_8_hZd=blvH92xUd2_bcF8gouER0D18T=Tlm912MJ_omyzqerqANVYXzndV-FLO6u6Qw8nysZHqY89QvdB1x0cRzwEJ0JexW4OARlG1YM8kbhI1i=9DyXUg6tPGKJ4xrhTYBvvcrBzsScerPpMjA3ls41av_LOYyBtEOYtx1MUywzVwIKJLV_Vg0zK=v3eHREWp8ofvVdd0rXM0oLz4TwAFynvN5oPx4oqAQEbgm00ekFhfWjAu5r3BwOfjQvi4AkAKHMplcSva_SGWYgVKEx3zbmw1XIFXqXQsz5GGE63BtzSER4MLfrS0WKflyZFwrS0mQfshSX0MKrBj8YBsJD0-BD2QO3FFRytqj15E3qqBaGbjeBom9ppgNyfDzHvKjNaHxDHqnQsBweGkTr_89W1yLPa8Sm_=qyrArrwp0gVfjlh6kiHNN8FdX2NILfP6YCoX5IUUZTo9WVhGUCDDbDCx9wzeB=PhkG8UadiN1Koo26eNix6eMQ1izduAbFlQRzHQR_hgk=xfFAy9Pq=Yp0VVDuuA4-VUolScbLUhfDKuJV-0_I9VTTDOp5ntwxTQ_Ajl_1caHS2sz=o35Dt-ZJ5xRRmrOI1E8WWe=WLm2ha86p9zEc3ul0KB-PT2l8lJXD5ML9vkTTX8wYnBfMIxDzx1pdWPBeLfjpcrAvz6tzF2R5DfaEw8Z_ovKnyGDQ366a-aEy3vr6qZHIwOqigSyyfP8yX-Ar1=HDkh1PX01fSU6TQdG4b1MCllaQNMDtOuLWALja3XvvWCyIYHU6ITOz5fH58_2Ci=sisrPCzsun9zcFwm4hu2sr9M22l4hKXSV=k8gGYKy2EIR66IpJZYEk-GAMKpMR8vFX2O5wr_PgBfwAmS_5Wj5I2XMr6qQAburk5vvwZuXkm8IeOFt3rAjVJxCwIeA-A0kfaA=zL-AaOCrkgElwJe1Vy9hWY5ljpmgkxBGPkwUaUGRdbdtVgIB=15PNQV0tCwFfud0vTzrlY46NhE3DBJ3rQ6Tsiop1WDopfdoE2B9gMr8riOn9Q42zjcHTrjplyLNE5UcEbTReywQkDw_5QWLCttgmpN1QFtxfYAiE=8djmpHaubU5PUZWr5o0Ka5=KK-CsfG1rwMRxQCBgrrrhD5Tr18o63lpBS24h5ifxTIsKPUO_OPgA5N3AnvYj1K9uaHeqZb6CWEDIrVwfHuzNdgslGFyC3w1qytPsxQor_TLzwfSLlW1SL8dPjwm0ou5BD=NR86DNItjlzaNpDyukXp8LU0nEewvv53O3IArag6z2XCiyqcPKr-CBoz2VbGccBhRaDWewcsPFVEdxYWq5BxYoYkxAlNk5kwDNwG=MIFA8wsOwm4tfMSlvykJSSz4zqYDnUalrABOFlFJ0r5yGFINoIUEc_C4X=mCG=xoizVAA=W3V9DlTBJLZPJnhmoFv1vBKSDeOVgq9dccEy9CXLr4FVgKd6p=dod9ZuUr2ucsD9=deMAlVHThU333egjAPcF5npgylDVTHl9AilKEBA-lir8EpMFM0xBNIUNMWAtsqESMLmJT08zpp8loIF4G5=C5BuMUfjqWXbDaQiPUR3QbRM=8pRZcHs3AodHAowPNDCBbWAsT30gBs0o4prAjbwo6OTTFhXbZnhusUVPDKgi8b-Y0spdvLTglSqkopT-0DXHh8YUvrC3OA-jskn1FSHKiL2HsKXfbbEy6hiq3On6peTjX140ITtxL-oNDNqW6aET5ru19cJcWywOIIllSD-BsdGiwq=Gi6_BtpGEa2P5llsMKvCl3PIIsgJ5fXz9hvIqpfM8xVHi1N=xYrjburpYqUDSx0u4_DzvpHSMq=T_D-4dLi=ViGkNDBFTZC6Fa_o65hrGxmzioT0UVoWmdEDDT-=j9Z-eLdBxQ0HcOJVDS=jFUmJYBugPjmgDpsSnL5e1ly1JdC-YcXH9j_8ldx6kSapQpSIVaA055ifW5DycSpklvvXGyvmRAMfwiRyVfO4JLSfvyj_mzGS1fQ1UeTSASJcye6_PPKItRKLzfnFToNO2QLH1NbSrT05rZwZIRyeo5trHrt=UPAPCmS2uAQaqOVj4EFdOrR8C-JTC-fai4nlVMjSh1sQKm-5lI-yOL5cHXCv=UMQFEQ6vMGnrlVW0c4BFW=Qk3L6c_MLvDV8g=r_mC1uYUlFXq8MZM6WF=d_Z11kLwSpcaWNGKJi2aLfMiAa5vhwTpi9mxjLOPe3-UbtCqM4voiRyT=3EkzQSqZ2eJGdDE4w5QTKp1rUfwEDA6waJtTFbqtZUOGN0B5CwTOg=p1s_OAQZfuipux=mSFWNaaaMO=Bhe8KVX90wxvKG9-phszJXAXOqL0keyDMceCTOMEx09mO-G0iQbitQf02ic-3EpBgUdLh293MJZpGsUwTWFLcZb2hDX_v=H5RiLdF=_WP8Am-nKkGjhiZGVgSQ0wPUNZJ81S6jL=40vHBCgL2gcxY-qZfqzifzlKL2xfaQAtnMz8M5uCVHpNrxuGW5nYmZuflvCZjS5eUkI8I=KtSJNd3_YKzhTofFHe35q3U-RZQ=v_HO2_kygzo2SUmHfOyRqZdFBdP3bqCA-fFoBfQu5XSEV4IEKdqtxkgMq4EiPatCTsNM8N2E84-nq2xrvC1q2hUIaS3e9mb1YMix4j_pPc9f88deEIBl3luD0=yqG8vKJz4sEEvi=b=Fe3gRDGsRe-XLeM1NK=ZER0sx4bqQOzANPOkiLwFyUrVHiCE_ICxInF4aZ=4eoJ5Z0VSNW-1JfrByz2TYCeJ_fNFKOZJg5BJ1XDbxkU=fX2VkMuJePlEmijk3CM0XUUvj9zKGiBDCIlnklhK48n0L6WRxST4Kjd=D-w1tgm=ADQ2yo1qZXFXg491vI-J=1GrFEvV=6n=Z5S5YM_BInYSENc-S0Diow5m0vVx4AyZAxU-501=QZR6=uHuxmf-MjDueP0i4AWOtX_kp_xWgkEKzAcyUsjCE_fIljLP1DCd3DAbCcvXHs=23JkcnQjS-qzGTGNxFYyJptN6PES6i6Mn2=LvxJcub9F=rGnwc2pEDH0rHOlZBMW=ea8w1=5HapPA6XyTmAPN_Oj90t1cDOImNwtd1r4xvqFNKQutdoARDLelrEoj8VZQtlOCNObHfrmNweQrynOQbzd9xWsyAgKOm5M==RNvAqRP2iJjNcQsITDWJgOjcGd1SqOG0XSyxJYuN1EK8WCfs1chWX8_vVY5oitPY-GiUDn-aRhd98UkQVUVFsziT-z=MFv=1gvm068q__oX4H6hJ-OZGN4=FRXAIi8SWPDwmSOnByDaMuuB-pZLhOYuRZWiZk4PjPIcRiNzdG45IDqqvPhIJlAMh2DZaCl6yp00=DSwgw2gVP_MSPGEbO=CuV3w9cqdTK-rVuRX2neQ3lwQBFAGAaVLBSQaXrWpZ9=3RuN98MmLDiEkWfpVoBW=qwAJWFcPNoNzosjCX4iXFbQehO6qhXJmHmHmGEizCtT9nYxqs2bKblUS3NotFcBkjE53Xc_YnDoWVv=zaz_BsDKmotTByll3S=uhL8UUO1zu6z_LBxrSgSBAQLLFBunSDWMtbP-=PqiBgeGJ6qOjqfatckm3syy_5eg03mvM8bsV02AvLlQusaHxtxid-pswaMRwzi4yMfxi0949UwsRNHk2orKb4ZenArZCMwNuXIN1gHDpEMjHJw6KA8R8JkC4WV83B_3f_oeC9DJcveAGuD1=1ifozBLhsTI=cEcdt8wPmz991xSAS38B6pzuaTlFat=b2aXSPpnDiX5x25O9QqkNgPGF4RoYB4GbnZBR4YurUWBzwbI1kmmnKewe3H02I-GtzsPZrfLKGo=JBVDqJQHuQXT9H3QZuRJc2Y_j1Puvsm88r3fg_2i1Kv=X4fIrEtoWuq=LIjb=LhKdjOnw3dhmL=zs9P6YGtZcnEdx4z9HxyVS=6czurqim-JJwe2ePGOmE-BLw5SJPK5SCVau93=9zC_jIyfqoWHoeYACXZaBX2XlHuXzLuk6=h1=isCP=0s5J=nGqGjDx_Cdp5QKMEJTED3bETaX2uU0VhGESTAmN2jv805xuQYfwXTLMNHET2=KOb_KVuyu0gpGuhCQ6pkdTDDllFy-SxZwkQuOh0nLWtnanixiHeOGvFsWn6WEAtNbxX4Iflon1bJb1pvG6HsN5QSY0wvzDGDq9wvC9IJ3iUOSkX3rdj3hj_6RJ2wg=6cRib_4x3kDm8n3KkL9tejsRzUMphxXTeAciHaLGzUgMpaS09spKE2gB2PknHvfBV5wMNDpoIp8FauLqciwL3lNXdbOUHJohU6WdenicLp9Ur4c2Zgg6RnhpnhJoj=RuOSs2FvVWZhfD6dnh9audckgP=jgylKY2I8=EbBdfBupZQaEFCfaSPO5-qyGOOtpXhvaiJAmjoaPTDkiPOMYBQS1jZIA83WXUhEVLGQexiWqwtodoyMrSUyg=bQt3pme2Z19x1v=_m3_qKYLsL=iOh9sVz5MrzDp2xjdN2Otuc4VseyJglT8eW2U4AVZgnrJSjl9h2cYIApFGJLK2tElrzPbruV9Y8kLG-vdtBt93hDzTG0CcMg9S=itgiQo1Dkiuo2-Ib9tFo4WNoxtmLw8d-4Dm1XcJJa55ApDa=9elLAhckBIaF1aFYnHbQgFJ2hvkkVzBsAL09-QT1pUIrN5avPBXYVzaH_E3ky=kmcg9dcodWxX=Kc9SqowX-nz6k8Aq6Xlu3-Tp_vVAhRjtIWYiKSWZWHUTBaAXqfj19kMADiW2ZfiLbe6rN511db3_oRT-8DMHy_gUyR4l59NkUWb68-eLCrrRVlnaM_9Yr-THXBrUGQ292ckRDJYWfSrvte-e41o6xIgwwU9wryjcGjtrbrcTQBfFqaXayMObVGT3GycCZPdOFGjfRS9EOvS9qdPxrYuq0bdeeto1RssbwTryOkgeTA5HmynBlrb6-pAP-d0u1ncZCfeqb1FeoF9AFN_ILQS3Oqss0id_Jfab1ozIcUFyspCFZ1IrmpNaqwD2MpGWkhlLuILYAwWAEjbJfxoy9zyuVb-ySxGCe_ZLCbd2j6K_ws8euz5Tsy6e_Y4vXFmE-66cDWCuBiUN5u_nfjdn=qaeFuQ6ZdZHTIhwe1g_2zvmjMsHkndvhnlFYsqNoGMuKhP44TuSovuI5jwy0xcaWOCyXWKKEIi5PYASGBBUnaoB=0CyKSebtRtcP90cKN3zNnNJsXSagHIMhk_uXHB8eZLtO2pWaUBmCZBr-1NGoETUU53wo2=kUXAKJ-M1eR_J85IpWv_yxSm_Sb-h-0Mhga_nq-Qb5Au1Y6kS4pk_DfYjAJisifT5BfXkq9vqv9En9DvxUNwd2DEcWeHcJL3mjvLRDp22Ab-CHWLOIUDTkmmUK5S8OkgE3VlArzz-oJiIbqxGvxIdU32m2JM1V8kb-3Ibqzds-nvqlFYfv4Zca23t1oRp-klgCl2IRFIWPqMfejoBSMi1efHjo5DHfBgOPyhmtpr-aLAE831=9_DFnxgC4aIgGCjqdylqQcZ0--HPHngT4LAk_igORltLnMNIrToSQIEsQ1-2Xz4=_zmIgd32Xq44JjlqUWruL_rc513u=RVrX'}
headers = {'Host': 'jbrest.jetblue.com', 'application-channel': 'Desktop_Web', 'sec-ch-ua-platform': '"macOS"', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0', 'booking-application-type': 'NGB', 'content-type': 'application/json', 'accept': 'application/json', 'api-version': 'v3', 'origin': 'https://www.jetblue.com', 'sec-fetch-site': 'same-site', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'accept-language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7', 'x-1itxwo9i-f': 'AxvBzMmJAQAAaAQ7zgSP4nlKcZSttXsGb9uYkkLY7uLh100Yc-RKVcn629ZUAWe0HDyuchRAwH9eCOfvosJeCA==', 'x-1itxwo9i-b': 'uixy0h', 'x-1itxwo9i-c': 'AIDoycmJAQAAXTn26Pxf_1wI4-I5djOjN3T2MOw-0aPIA0D-voJsBMavdngQ', 'x-1itxwo9i-d': 'ABaAhIjBCKHFgQGAAYIQgISi0aIA5JmBzvpDzz8AgmwExq92eBAAAAAAH29cNgATB04U6gtu8Zerkf2sfOfx', 'x-1itxwo9i-z': 'q', 'x-1itxwo9i-a': 'IQ8hzLAo5YXL9aH30LKiw8OwGY2HpPNnv5BWJWU6AKbOmW3muL8zYxi0jh6WuRhqMk3UKDMh-xMVBNqos1z0yTHWgLRPDxu5CiJMjAu-sp_Aut3go7bqfI0hvfMc14flP8mN1cXSrI7p5Irr7-TuOjsB_JHzJ2biP7pQrwD3qW9GByOtW3b5uAmpghgv5TMT9NmnrIMzaiw1wGQUxe5w0Nmt3NvmkODRITQuHR81yBWIFBGbWJexl-8bfhVS1YPmdGjabjWjIyHVwgiP9B_AFKVE0TMTvXXksO=LYw92VjpH0W_lQ8NaN8px4FUYcX_09l-yo6PmE=WCNP20rEQ4uDK0ddHtH6woUjxHKXzc6ossSo4NlSDjILznJaa5RHeNTeKDeJeRpdbsMdCaCWd2=YnPDCK4sh1KlV4H68K7fcXTij9rpswKgX1Gp5KNyq8Aj06q6hoeOf4LbB_hFIjy41=fqX_a4gm-D3Fu-srNXg0pwxtUl97gUAo1AgFcGja=Rhm1M9qrUcE1FKpeBTAKC_lhbMkDjioXEbjWALjkmIN8E=fl==UX0X0-nLt5oYUNQnoYIcvPQrGkdp4AUEeYzW=TM5SU1PJkESu4hFuq1SICm3h6VmkTnT4tcqSrM_jMOg6LwR4E2IhmGGM9yXys-ij1GjAyQ9df37W4WbPrjT=TuIqBx_WXgsorJ-6sg0x9vscmiGKl6KqSj1qqudPAneyTfl4Pwv2xd_iPsvK7IA9AxhuR5Rgokal4lV32cuWvuJqkE8INbMi7HtShUlKo4ci7KoHu9FJ-RBX0-G7hR1LwTDW1Gex61KrFjrBD_kasnE6_aN7EUflgrcivkVB2NDsnWu2Y=KJF94TdbF2c1Oyp1QCPGVfbjk7mNxp_EXApSEw13ntT_PX5uwnT=Lq5GUJKs7X9IeLBXQtHp=shuI3knKCCT2kX1N3RdhbAvAszs0-PaSlPWOyBjTrqWKLEr_ppjV8DA3cw45W2g9mO9O6OlfetLUlt90GEAg7JbpmKa1pgyKu1hM5ktq_6KzmJzrmrp4rsFA1b-foV7BFtBJjvWmRPnJeHGwAawvgPKhFhM2zp_p=p2WtB8y0hWFdPb2rJeHLd2kpyMtGPeuEypmu=GnNFJtSpnqHd3RxNFGd0mKfkF9uuUARjPmGCwB=UliB7DMr-=jwLiyNiqt9sl74D1XmoNShkD0LdzvuilzqekrY9M86DXfbDMAB2hPW8Lw3bd=sjdHioVXUaVXOd41eRa6cpgm5lQyHGmdcYct_J0eJRED8nXVNWqHDBH8luCDq5OYALToh64cGtWm_7QHYQhVy2UYrkccvXKaSEIvnlOyN0=H5G2ufUw3PBUKUBCOmxQb7_BaHVtpQ2fzlguGYd-2TLsl7OCLwG9k1fkMJSOdVe6m4_VrXd6VSLQ0JbYzVGcVm97tQuKAbIfi7c'}
response = session.post(url, headers=headers, json=data)
......
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