Хорошо, я размещаю сервер на своем локальном хосте, который отображает интерфейс для запуска скриптов узла, делая это с помощью веб-пакета. В этом скрипте узла я использую ax ios для выполнения запросов post и get, а также для хранения файлов cookie. Когда я использую прокси (я должен использовать прокси, потому что supremenewyork.com не принимает запросы локального хоста из-за cors), похоже, что куки не сохраняются где-либо в каждом запросе. Мне нужен скрипт для хранения файлов cookie после запроса на отправку, а затем отправка этих файлов cookie в следующем. Любая помощь потрясающая. Вот мой код:
helperFunctions. js
const axios = require("axios");
const cheerio = require("cheerio");
const qs = require('qs');
// constants
const RETRY_DELAY = 1000;
// creating a simple axios session so all cookies are stored throughout the checkout process
const session = axios.create({
baseURL: `http://botapi.supremenewyork.com:8050`,
timeout: 15000
});
сервер. js
const express = require('express');
const request = require('request');
const cors = require('cors');
const app = express();
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
next();
});
app.options('*', cors());
app.get('/', (req, res) => {
request(
{ url: 'https://supremenewyork.com' },
(error, response, body) => {
if (error || response.statusCode !== 200) {
return res.status(500).json({ type: 'error', message: error.message });
}
res.send(body);
}
)
});
app.get('/mobile_stock.json', (req, res) => {
request(
{ url: 'https://supremenewyork.com/mobile_stock.json' },
(error, response, body) => {
if (error || response.statusCode !== 200) {
return res.status(500).json({ type: 'error', message: error.message });
}
res.send(body);
}
)
});
app.get('/shop/:jsonfilename', (req, res) => {
let jsonName = req.params.jsonfilename;
request(
{ url: 'https://supremenewyork.com/shop/'+jsonName },
(error, response, body) => {
if (error || response.statusCode !== 200) {
return res.status(500).json({ type: 'error', message: error.message });
}
res.send(body);
}
)
});
app.post('/shop/:itemId/add.json', (req, res) => {
let item = req.params.itemId;
request(
{ url: 'https://supremenewyork.com/shop/'+item+'add.json'},
(error, response, body) => {
if (error || response.statusCode !== 200) {
return res.status(500).json({ type: 'error', message: error.message });
}
res.send(body);
}
)
});
const PORT = process.env.PORT || 8050;
app.listen(PORT, () => console.log(`listening on ${PORT}`));
Здесь происходит все действие, серверная часть. js:
var productSearch = require('./productSearch');
var helperFunctions = require('./helperFunctions');
const DELAY = 1500;
const addItemToCart = async (itemId, sizeId, styleId) => {
const postUrl = `/shop/${itemId}/add.json`;
const postData = {
"st": styleId,
"s": sizeId,
"qty": "1"
};
while(true){
const addToCart = await helperFunctions.postTo(
postUrl,
postData,
DELAY,
"Adding item to cart...",
"Failed to add item to cart, retrying...");
if(addToCart.data.length > 0){
let allCookies = addToCart.headers["set-cookie"].join("; "); //This is the part that fails because there aren't any cookies to parse, but there should be
let pureCookie = addToCart.headers["set-cookie"][2];
pureCookie = pureCookie.split("=")[1].split(";")[0]; // this returns the pure_cart cookie value
// let ticketCookie = addToCart.headers["set-cookie"][4]; // return the ticket cookie if there is one
// ticketCookie = ticketCookie.split(";")[0];
// let cartCookie = addToCart.headers["set-cookie"][1]; // return the ticket cookie if there is one
// cartCookie = cartCookie.split(";")[0];
return [allCookies, pureCookie];
}
else {
console.log("Item is out of stock, retrying...")
}
}
}
const checkout = async (cookie, addToCartCookies) => {
checkoutPureCartCookie = cookie.split("%").join("%25");
// console.log(checkoutPureCartCookie);
const checkoutLink = `https://www.supremenewyork.com/checkout/totals_mobile.js?order%5Bbilling_country%5D=USA&cookie-sub=${checkoutPureCartCookie}&order%5Bbilling_state%5D=&order%5Bbilling_zip%5D=&mobile=true`;
// const checkoutLink = "/mobile/#checkout";
const checkoutEndpoint = "/checkout.json";
let now = new Date();
let epochTime = now.getTime();
firstCookies = `shoppingSessionId=${epochTime}; ` + addToCartCookies;
// go to the checkout page
const checkoutPage = await helperFunctions.redirectToWithHeaders(
checkoutLink,
{
'cookie': firstCookies, // where i need to send the cookies
},
DELAY,
"Sending payment details soon...",
"Error accessing checkout page, retrying...");
let checkoutPageCookies = checkoutPage.headers["set-cookie"].join(";");
}
Мне в основном нужен прокси-сервер для хранения всех файлов cookie, установленных по умолчанию, чтобы скрипт мог получить эти файлы cookie и завершить программу.