Как отправить запрос к админке для добавления франшизы? fetch

Енот
Новичо́к, через «о́»
Регистрация
26 Авг 2018
Сообщения
495
#1
Доброго времени суток,
Пытаюсь обратиться по API к сайту:
Код:
// Создаём кроссбраузерный объект XMLHTTP
function getXmlHttp() {
var xhr;
try {
    xhr = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
            xhr = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (E) {
            xhr = false;
        }
    }
if (!xhr && typeof XMLHttpRequest!='undefined') {
  xhr = new XMLHttpRequest();
}
return xhr;
}

function Get_Cinema_Info(subdomain, domain) {
    var xhr = getXmlHttp();                                                                         // Создаём объект XMLHTTP
        type = "movie";
        token = "Soon-9b24679ee2abc8ca012ca4b07223739f";
        url = `https://${subdomain}.${domain}/api?token=${token}&type=${type}`;

    xhr.open('GET', url, true);                                                                        // Открываем асинхронное соединение
    xhr.setRequestHeader('authority', `https://${subdomain}.${domain}`);                            // Отправляем кодировку
    xhr.onload = function (e) {                                                                        // Ждём ответа от сервера
        if (xhr.readyState == 4 && xhr.status == 200) {                                                // Если ответ пришел и сервер вернул код 200
            console.log(JSON.parse(xhr.responseText));                                                // Запускаем функцию чтения JSON
        }
    };
    xhr.send(null);
}
Токен рабочий, в ручную урл открывается и там все как нужно, по запросу ругается на заголовок, но я не могу понять что именно ему не нравится :(
Access to XMLHttpRequest at 'https://ПОДДОМЕН.ДОМЕН/api?token=Soon-9b24679ee2abc8ca012ca4b07223739f&type=movie' from origin 'http://testxhr' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

GET https://ПОДДОМЕН.ДОМЕН/api?token=Soon-9b24679ee2abc8ca012ca4b07223739f&type=movie net::ERR_FAILED

Запрос вместо GET возвращает OPTIONS

  1. Request URL:
    https://ПОДДОМЕН.ДОМЕН/api?token=Soon-9b24679ee2abc8ca012ca4b07223739f&type=movie
  2. Request Method:
    OPTIONS
  3. Status Code:
    520
  4. Remote Address:
    ТУТ IP
  5. Referrer Policy:
    strict-origin-when-cross-origin

Умные люди подскажите, что не так?
 
Последнее редактирование:
Енот
Новичо́к, через «о́»
Регистрация
13 Июн 2020
Сообщения
143
#2
Заголовок ответа Access-Control-Allow-Origin применяется в механизме Cross-Origin Resource Sharing (CORS), чтобы дать возможность браузеру пользователя получать разрешения на доступ к ресурсам домена, отличном от того, с которого поступает запрос. Access-Control-Allow-Origin указывает, какие домены могут обращаться к ресурсам сайта.
Возможно в этом дело.
 
Енот
Новичо́к, через «о́»
Регистрация
26 Авг 2018
Сообщения
495
#3
Заголовок ответа Access-Control-Allow-Origin применяется в механизме Cross-Origin Resource Sharing (CORS), чтобы дать возможность браузеру пользователя получать разрешения на доступ к ресурсам домена, отличном от того, с которого поступает запрос. Access-Control-Allow-Origin указывает, какие домены могут обращаться к ресурсам сайта.
Возможно в этом дело.
Ну это то я понял 😁, у меня не хватает мозгов как с этим взаимодействовать 🤔,
такая конструкция по отношении к другим сайтам исправно работает а тут не хочет, видимо нужно попробовать выполнить запрос не с другого сайта а обращаться с домена самого киносайта, до большего я не додумался...

Запрос с домена самого киносайта ничего не дал ... :(
 
Последнее редактирование:
Енот
Новичо́к, через «о́»
Регистрация
26 Авг 2018
Сообщения
495
#4
Неужели тут нет человека который уже взаимодействовал с API киносайта...
@Alisa, найдись....
 
Енот
Новичо́к, через «о́»
Регистрация
26 Авг 2018
Сообщения
495
#5
В общем, в данный момент я почти дописал 2 модуля (и по завершении поделюсь ими со всеми).

1) Модуль уже позволяет:
  • получать информацию о предстоящих к выходу новинках (на срок до 1 года);
  • заказывать уникальное описание (с ключевыми запросами) к данным произведениям (рерайт за сущие копейки, 19р. за 1К символов, качественно, 100% уник по text.ru, описание проходит модерацию!);
  • получать даты всех запланированных релизов для любого произведения.
В разработке:
  • фильтры для сортировки новинок (для каких фильмов нужно уник. описание, а для каких нет);
  • вывод на страницу сериала даты выхода предстоящей серии;
  • календарь серий.

2) Модуль уже позволяет:
  • получать новости кино индустрии;
  • заказывать уникальный текст для к получаемых новостей (рерайт за сущие копейки, 19р. за 1К символов, качественно, 100% уник по text.ru, описание проходит модерацию!).
В разработке:
  • фильтры для сортировки получаемых новостей (для каких новостей нужно уник. описание, а для каких нет).
Оба модуля могут работать как автоматически (закинул денег на баланс биржи для заказа описаний и забыл) так и в ручном режиме (придется подтверждать заказ каждого описания ручками);

Есть одно НО, вся получаемая модулями информация попросту бесполезна, без выгрузки на киносайт.
Для этого нужно задействовать API киносайта, и мне не как не удается отправить запрос. Проблема в передаваемом заголовке.
Кто-нибудь помогите разобраться с API. К нему нет никаких мануалов.....
 
Последнее редактирование:
Енот
Новичо́к, через «о́»
Регистрация
30 Мар 2018
Сообщения
138
#6
cors это не ошибка, а защита сайта от кросдоменных запросов
Access to XMLHttpRequest at 'https://ПОДДОМЕН.ДОМЕН/api?token=Soon-9b24679ee2abc8ca012ca4b07223739f&type=movie' from origin 'http://testxhr' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
чтобы такого не было в nginx должно быть разрешение
NGINX:
add_header "Access-Control-Allow-Origin" "*";
 
Енот
Новичо́к, через «о́»
Регистрация
26 Авг 2018
Сообщения
495
#7
cors это не ошибка, а защита сайта от кросдоменных запросов

чтобы такого не было в nginx должно быть разрешение
NGINX:
add_header "Access-Control-Allow-Origin" "*";
Да я знаю что это не ошибка :) я вроде бы пробовал прописывать со звёздочкой, завтра буду возле ПК, попробую предложенный вами вариант
 
Енот
Новичо́к, через «о́»
Регистрация
13 Янв 2018
Сообщения
536
#8
В общем, в данный момент я почти дописал 2 модуля (и по завершении поделюсь ими со всеми).

1) Модуль уже позволяет:
  • получать информацию о предстоящих к выходу новинках (на срок до 1 года);
  • заказывать уникальное описание (с ключевыми запросами) к данным произведениям (рерайт за сущие копейки, 19р. за 1К символов, качественно, 100% уник по text.ru, описание проходит модерацию!);
  • получать даты всех запланированных релизов для любого произведения.
В разработке:
  • фильтры для сортировки новинок (для каких фильмов нужно уник. описание, а для каких нет);
  • вывод на страницу сериала даты выхода предстоящей серии;
  • календарь серий.

2) Модуль уже позволяет:
  • получать новости кино индустрии;
  • заказывать уникальный текст для к получаемых новостей (рерайт за сущие копейки, 19р. за 1К символов, качественно, 100% уник по text.ru, описание проходит модерацию!).
В разработке:
  • фильтры для сортировки получаемых новостей (для каких новостей нужно уник. описание, а для каких нет).
Оба модуля могут работать как автоматически (закинул денег на баланс биржи для заказа описаний и забыл) так и в ручном режиме (придется подтверждать заказ каждого описания ручками);

Есть одно НО, вся получаемая модулями информация попросту бесполезна, без выгрузки на киносайт.
Для этого нужно задействовать API киносайта, и мне не как не удается отправить запрос. Проблема в передаваемом заголовке.
Кто-нибудь помогите разобраться с API. К нему нет никаких мануалов.....
Может он поможет https://github.com/zeldaroot вроде все коммиты он пишет
 
Енот
Новичо́к, через «о́»
Регистрация
13 Янв 2018
Сообщения
536
#10
В общем, в данный момент я почти дописал 2 модуля (и по завершении поделюсь ими со всеми).

1) Модуль уже позволяет:
  • получать информацию о предстоящих к выходу новинках (на срок до 1 года);
  • заказывать уникальное описание (с ключевыми запросами) к данным произведениям (рерайт за сущие копейки, 19р. за 1К символов, качественно, 100% уник по text.ru, описание проходит модерацию!);
  • получать даты всех запланированных релизов для любого произведения.
В разработке:
  • фильтры для сортировки новинок (для каких фильмов нужно уник. описание, а для каких нет);
  • вывод на страницу сериала даты выхода предстоящей серии;
  • календарь серий.

2) Модуль уже позволяет:
  • получать новости кино индустрии;
  • заказывать уникальный текст для к получаемых новостей (рерайт за сущие копейки, 19р. за 1К символов, качественно, 100% уник по text.ru, описание проходит модерацию!).
В разработке:
  • фильтры для сортировки получаемых новостей (для каких новостей нужно уник. описание, а для каких нет).
Оба модуля могут работать как автоматически (закинул денег на баланс биржи для заказа описаний и забыл) так и в ручном режиме (придется подтверждать заказ каждого описания ручками);

Есть одно НО, вся получаемая модулями информация попросту бесполезна, без выгрузки на киносайт.
Для этого нужно задействовать API киносайта, и мне не как не удается отправить запрос. Проблема в передаваемом заголовке.
Кто-нибудь помогите разобраться с API. К нему нет никаких мануалов.....
есть ли прогресс по данному модулю?
 
Новичо́к, через «о́»
Регистрация
20 Сен 2021
Сообщения
7
#12
К сожалению без продвижений, не могу обойти политику CORS при обращении по API к киносайту.
CORS - это защита браузера. если удаленный сервер не указывал у себя заголовки с разрешениями для CORS, то браузер блокирует такие запросы
чтобы это обойти, нужно
- на сервере с апи указать нужные заголовки
- отправлять запросы на апи не с браузера, а со своего сервера/скрипта (или через свой прокси-скрипт, у которого установлены нужные заголовки CORS)
- написать расширение для браузера и работать с апи через это расширение
 
Последнее редактирование:
Енот
Новичо́к, через «о́»
Регистрация
26 Авг 2018
Сообщения
495
#13
CORS - это защита браузера. если удаленный сервер не указывал у себя заголовки с разрешениями для CORS, то браузер блокирует такие запросы
чтобы это обойти, нужно
- на сервере с апи указать нужные заголовки
- отправлять запросы на апи не с браузера, а со своего сервера/скрипта (или через свой прокси-скрипт, у которого установлены нужные заголовки CORS)
Со своего сервака пробовал, бестолку, (или я криворукий ...)
Но а по заголовкам я просто не могу понять какие нужно указывать то я там только не писал, результат один..
 
Новичо́к, через «о́»
Регистрация
20 Сен 2021
Сообщения
7
#14
Со своего сервака пробовал, бестолку, (или я криворукий ...)
Но а по заголовкам я просто не могу понять какие нужно указывать то я там только не писал, результат один..
заголовки нужно менять на сервере с апи. нужные заголовки для каждого веб-сервера можно посмотреть тут - https://www.w3.org/wiki/CORS_Enabled#For_nginx
 
Енот
Новичо́к, через «о́»
Регистрация
26 Авг 2018
Сообщения
495
#15
Енот
Новичо́к, через «о́»
Регистрация
26 Авг 2018
Сообщения
495
#16
Я нашел свою ошибку при подключении по API.
Продолжаю написание модулей, (возможно будет добавлена фича позволяющая перед заказом описаний автоматом подбирать ключи по частоте и по итогу будет предоставлять отчет для продвижения)

Для тех кто решить юзать API CinemaPress.
P.S: Необходимо отправлять запрос именно на тот домен (поддомен) с которого запущен скрипт. С основного домена к своему же поддомену запрос блокируется, и в обратном направлении соответственно. Т.е. обращение hostname к самому себе и не как иначе!
 
Енот
Новичо́к, через «о́»
Регистрация
13 Янв 2018
Сообщения
536
#17
Я нашел свою ошибку при подключении по API.
Продолжаю написание модулей, (возможно будет добавлена фича позволяющая перед заказом описаний автоматом подбирать ключи по частоте и по итогу будет предоставлять отчет для продвижения)

Для тех кто решить юзать API CinemaPress.
P.S: Необходимо отправлять запрос именно на тот домен (поддомен) с которого запущен скрипт. С основного домена к своему же поддомену запрос блокируется, и в обратном направлении соответственно. Т.е. обращение hostname к самому себе и не как иначе!
Значит лед тронулся, а то походу ращрабы слились))
 
Енот
Новичо́к, через «о́»
Регистрация
26 Авг 2018
Сообщения
495
#18
Требуется свежий взгляд, я в упор не вижу ошибку, при обращении через GET все аргументы и параметры читаются.
Но при передаче параметров через POST получаю ошибку
Ошибка 400 значит, что запрос к серверу содержит синтаксическую ошибку. Но иногда проблема вызвана факторами, которые не имеют прямого отношения к запросу.

Для теста пытаюсь изменить фильм Терминатор 2 по ID 444
JavaScript:
function Send_Cinema_Info() {
    var xhr = new XMLHttpRequest();
        protocol = window.location.protocol;
        hostname = window.location.hostname;
        token = "Soon9b24679ee2abc8ca012ca4b07223739f";

    var body = `{
        "movie":{
          "kp_id":"444",
          "title_page":"",
          "description_short":"",
          "title_ru":"Люди Икс 2",
          "title_en":"X2",
          "description":"Мутанты продолжают борьбу...",
          "poster":"1",
          "type":"0",
          "year":"2003",
          "country":"Канада,США",
          "genre":"фантастика,боевик,триллер,приключения",
          "director":"Брайан Сингер",
          "actor":"Патрик Стюарт,Хью Джекман,Иэн МакКеллен,Холли Берри,Фамке Янссен",
          "premiere":"2003-04-25",
          "kp_rating":"75",
          "kp_vote":"127579",
          "imdb_rating":"75",
          "imdb_vote":"456928",
          "pictures":"2934854,2934853,2934852",
          "player":"",
          "quality":"",
          "translate":"",
          "custom":"{\n    \"unique\": true\n}"}
        }`;

    /* console.log(body); */
 
    url = `${protocol}//${hostname}/api?token=${token}&id=444`;

    xhr.open('POST', url, true);                                                                    // Открываем асинхронное соединение
    xhr.setRequestHeader('Content-type', 'application/json; charset=utf-8');                         // Отправляем кодировку
    xhr.onload = function (e) {                                                                        // Ждём ответа от сервера
        if (xhr.readyState == 4 && xhr.status == 200) {                                                // Если ответ пришел и сервер вернул код 200
            console.log(JSON.parse(xhr.responseText));
        }
    };
    xhr.send(body);
}
Кто заметил ошибку?
 
Последнее редактирование:
Новичо́к, через «о́»
Регистрация
20 Сен 2021
Сообщения
7
#19
значит сервер/приложение, куда отправляется запрос - не принимает post запросы
не работал с синемапресс, но как я понял, вы пытаетесь в контроллер, который отдает результаты поиска, отправить запрос на добавление записи?
 
Енот
Новичо́к, через «о́»
Регистрация
26 Авг 2018
Сообщения
495
#20
значит сервер/приложение, куда отправляется запрос - не принимает post запросы
не работал с синемапресс, но как я понял, вы пытаетесь в контроллер, который отдает результаты поиска, отправить запрос на добавление записи?
Верно, (на редактирование и добавление) пробовал и через GET отсылать, не работает, хотя это был бы лютый изврат, судя по количеству отдаваемых данных.

Жаль нет никаких мануалов к данному функционалу, непонятно какие методы применять, с какими параметрами и аргументами
 
Последнее редактирование:
Енот
Новичо́к, через «о́»
Регистрация
26 Авг 2018
Сообщения
495
#21
Кто-нибудь знает как на JS отправить данные для авторизации в админку?
Запрос уходит и висит в стадии ожидания, предварительно вывалив на страницу alert с элементами для авторизации но вход не выполняется, что тут не так?
JavaScript:
async function Send_Cinema_Info() {
    var url.protocol = document.location.protocol,
        url.domain = document.location.host,
        url.page = (url.protocol+'//'+url.domain+'/'),
        json_url = url.page+'admin-secret/movies',
        USER = 'admin',
        PASSWORD = '123456789';

    await fetch(json_url, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json; charset=utf-8',
            'Access-Control-Allow-Origin': '*',
            'Access-Control-Allow-Credentials': true,
            'Authorization': `Basic btoa(${USER}:${PASSWORD})`
        }
    })
}

Send_Cinema_Info();
 
Последнее редактирование: