Иногда его всегда блокировали, если он не соответствовал политике запросов HTML.
Когда я извлекаю данные с помощью API, снова и снова происходит что-то не так. Вот как я быстро исправил это четырьмя способами.
исходное получение:
Когда сначала несколько раз выполняется, он работает и как-то выскакивает ошибка доступа.
Почему это происходит?
когда пользователь отправляет запрос в API, сервер чувствует себя небезопасно отправлять данные обратно клиенту, не прошедшие квалификацию. Источником должен быть доверенный сайт, который должен быть объявлен в заголовке.
Узнайте больше о Access-control-allow-origin.
Поэтому я пытаюсь использовать прокси, чтобы исправить это в первую очередь.
1. Первый популярный прокси — https://cors-anywhere.herokuapp.com/
А потом опять что-то не так. И ответ медленный с этим прокси.
GET https://cors-anywhere.herokuapp.com/https://randomuser.me/api/ 429 (Too Many Requests)
Это ошибка 429 слишком много запросов.
Похоже это проблема cors-anywhere.herokuapp.com
2.Затем я пытаюсь отказаться от него, чтобы попробовать другой https://api.allorigins.win/raw?url=
И это работает и быстрее, чем herokuapp.
Если вы хотите попробовать этот прокси здесь
3.Еще один способ — настроить режим выборки:
Когда вы просматриваете MDN об использовании выборки, понятно объяснить настройку.
// Example POST method implementation:
async function postData(url = '', data = {}) {
// Default options are marked with *
const response = await fetch(url, {
method: 'POST', // *GET, POST, PUT, DELETE, etc.
mode: 'cors', // no-cors, *cors, same-origin
cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached
credentials: 'same-origin', // include, *same-origin, omit
headers: {
'Content-Type': 'application/json'
// 'Content-Type': 'application/x-www-form-urlencoded',
},
redirect: 'follow', // manual, *follow, error
referrerPolicy: 'no-referrer', // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url
body: JSON.stringify(data) // body data type must match "Content-Type" header
});
return response.json(); // parses JSON response into native JavaScript objects
}
postData('https://example.com/answer', { answer: 42 })
.then(data => {
console.log(data); // JSON data parsed by `data.json()` call
});
Ожидаемый заголовок CORS на узле:
res.setHeader('Access-Control-Allow-Origin', 'whatever.com:9000');
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
res.setHeader('Access-Control-Allow-Credentials', true); // you probably dont want this one unless there is auth/cookies involved
res.setHeader('Access-Control-Allow-Methods', 'GET,PATCH,POST,PUT,DELETE');
еще одна статья по теме в freecodecamp
4.Еще один способ Chrome:
в расширении Google есть варианты по этому поводу, такие как cross domain-cors и allow cors:access-control-allow-origin.
Просто добавив в Chrome, проще контролировать, какой сайт вы хотите разрешить.
А также можете создать собственный прокси, чтобы исправить это, но я просто пропущу это здесь.