Не удается сохранить куки в сеансе прокси - PullRequest
0 голосов
/ 29 апреля 2020

Хорошо, я размещаю сервер на своем локальном хосте, который отображает интерфейс для запуска скриптов узла, делая это с помощью веб-пакета. В этом скрипте узла я использую 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 и завершить программу.

...