Вызов API работает через код на стороне сервера (node.js, php), но не через JS в браузере с использованием fetch () - PullRequest
0 голосов
/ 01 июня 2019

Я пытаюсь сделать запрос API POST через fetch (). Когда я выполняю его на стороне сервера (PHP или Node.js), он работает правильно. При попытке выполнить его в браузере я получаю две ошибки: 1) Ошибка 405 - метод не разрешен 2) Доступ к извлечению по адресу 'url' из источника 'null' был заблокирован политикой CORS: Ответ на запрос предварительной проверки не проходит проверку контроля доступа: в запрошенном ресурсе отсутствует заголовок 'Access-Control-Allow-Origin' , Если непрозрачный ответ отвечает вашим потребностям, установите режим запроса «no-cors», чтобы получить ресурс с отключенным CORS.

Я попытался добавить: mode: "no-cors". Затем я получаю следующую ошибку: «401 Несанкционированный» со следующим ответом: 401 ответ

Вот моя стандартная настройка js:

const TrailData = {
      email: "test@test.com",
      first_name: "sample string 5",
      last_name: "sample string 6",
      phone2: "12121212"
    };


    // TRAIL POST ( NOT WORKING )
    fetch('http://webapi.mymarketing.co.il/api/contacts', {
            method: "POST",
            mode: 'no-cors',
            headers: {
              "Authorization": "API CODE //here comes the API CODE",
              "Content-Type": "application/json"
            },
            body: JSON.stringify(TrailData)
          })
          .then(res => console.log(res) )
          .then(data => console.log(data))
          .catch(err => console.log(err))

Настройка My Node js:

var postData = {

    sms_status: "None",
    email: "test@test.com",
    first_name: "sample string 5",
    last_name: "sample string 6", 
  };

  let axiosConfig = {
headers: {
    "Authorization": "API CODE",
    'Content-Type': 'application/json;charset=UTF-8',
    "Access-Control-Allow-Origin": "*",
}
  };


const Trail = async () =>{
try {
    const response = await axios.post('http://webapi.mymarketing.co.il/api/contacts', postData, axiosConfig)
    console.log(response)
} catch (error) {
    throw new Error(error)
}


  }

 Trail()

Узел JS работает. Я получаю 200 ОК ответ. Первый нет!

Возможно ли, что API блокирует запросы, сделанные из браузера? Я пробовал так много способов и каждый раз терпел неудачу при использовании браузера

Спасибо за любую помощь!

1 Ответ

2 голосов
/ 01 июня 2019

вы не можете отправлять дополнительные заголовки без CORS (Authorization заголовок)

, поскольку сервер не отвечает на предварительный запрос, вам не разрешено отправлять этот запрос

без CORS, которым вы являетесьразрешено отправлять только «Простые запросы», см. https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Simple_requests

, см. https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

и https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request

для получения дополнительной информации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...