Запуск сценария ax ios с веб-интерфейса локального сервера - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть внешний интерфейс, размещенный на моем локальном хосте. Как только пользователь заполняет все данные в этом интерфейсе, он нажимает кнопку, которая затем запускает функцию startBot (), которая использует ax ios. Если я просто запускаю startBot, используя командную строку, а не сервер, скрипт работает отлично, но когда я использую функцию с сервера, ax ios использует данные моего браузера для отправки информации. Вот мой код: это функция, которая запускается, когда пользователь нажимает кнопку для запуска startBot ():


const lodash = require('lodash');
const fuzzyset = require('fuzzyset.js');
var helperFunctions = require("./helperFunctions");

const DELAY = 1500;

const getSupremeProducts = async () => {

    let supremeHome = `?p=${new Date().getTime()}`;

    await helperFunctions.redirectTo(
        supremeHome, 
        DELAY, 
        "Successfully connected to Supreme!", 
        "Error accessing Supreme site, retrying...");

    // direct link to the backend of the site
    let backendLink = "/mobile_stock.json";

    const products = await helperFunctions.redirectTo(
        backendLink, 
        DELAY, 
        "Successfully connected to backend!", 
        "Error accessing Supreme site, retrying...");

    return products.data;
}

Вот файл helperFunctions:

const axios = require("axios");
const cheerio = require("cheerio");
const qs = require('qs');

// constants
const RETRY_DELAY = 1000;

axios.defaults.withCredentials = true;

// creating a simple axios session so all cookies are stored throughout the checkout process
const session = axios.create({
    baseURL: `https://www.supremenewyork.com`,
    headers: {
        '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',
        'x-requested-with': 'XMLHttpRequest',
        'Connection': 'keep-alive'
    }
  });

// timer function for delays
const timer = ms => new Promise( res => setTimeout(res, ms));

// function for simple get requests
const redirectTo = async (redirectLink, delay, successfullMessage, errorMessage) => {

    while(true){

        try{
            const getRedirect = await session.get(redirectLink);

            if(getRedirect.status === 200){
                if(successfullMessage != null){
                    console.log(successfullMessage);
                }
                await timer(delay);
                return getRedirect;
            }

            else {
                console.log(errorMessage)
                await timer(delay);
            }
        }

        catch(err){
            console.log(err);
            await timer(delay);
        }
    }
}

Теперь, когда я запускаю getSupremeProducts () в терминале без сервера, он прекрасно работает, но при запуске с внешнего интерфейса он все портит (кстати, я использую webpack, поэтому я могу запустить скрипт модуля узла из html) и вызывает эту ошибку:

Errors

Любая помощь с благодарностью! Мне просто нужно выяснить, как запустить этот код из внешнего интерфейса, но пусть ax ios не использует данные сервера для запуска кода.

1 Ответ

2 голосов
/ 29 апреля 2020

В целях безопасности браузеры ограничивают перекрестные HTTP-запросы, инициируемые из сценариев. Это CORS, вам нужно изменить заголовки на удаленном сервере, чтобы разрешить запросы от вашего домена и порта. Если у вас нет контроля над этим, есть несколько вариантов *.

  • Добавьте ваш локальный адрес и порт в разрешенные для сервера домены
  • Если вы только разрабатываете локально и не имея контроля над сервером, вы можете временно отключить CORS в своем браузере!
  • Создайте локальный прокси-сервер, ваш веб-интерфейс отправляет запрос на прокси-сервер и прокси-сервер на удаленный сервер (я обычно придерживайтесь этого, просто убедитесь, что у него есть первая точка, разрешенные имена хостов и порты и т. д. c)

Подробнее об этом можно прочитать здесь (https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS )

...