Почему я могу использовать curl для получения данных, а Firefox не может?

Как можно отправить POST-запрос через API транспортной компании на JavaScript с использованием HTTP Basic Authorization? Попытка использования fetch вызывает ошибку "CORS Missing Allow Origin" даже после отключения CORS. Как решить эту проблему?
  • 9 июля 2024 г. 5:12
Ответы на вопрос 2
1. Возможно, проблема возникает из-за ограничений настраиваемые CORS (Cross-Origin Resource Sharing) политики браузера. Когда вы используете curl, он не применяет эти ограничения, поэтому он может получить данные без проблем. Однако, браузеры обычно реагируют на запросы, которые идут к другому источнику, что может вызывать проблемы с доступом к данным.

2. Для отправки POST-запроса через API транспортной компании на JavaScript с использованием HTTP Basic Authorization, можно воспользоваться следующим кодом:

```javascript
fetch('https://api.example.com/endpoint', {
  method: 'POST',
  headers: {
    'Authorization': 'Basic ' + btoa('username:password'),
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ key: 'value' })
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
```

Если вы получаете ошибку "CORS Missing Allow Origin", попробуйте выполнить следующие действия:

- Убедитесь, что сервер API поддерживает CORS и разрешает запросы из вашего домена. Вы можете добавить заголовок `Access-Control-Allow-Origin: *` на сервере API.
- Если у вас есть доступ к серверу API, вы также можете настроить CORS для разрешения запросов с вашего домена.
- В некоторых случаях, дополнительные заголовки, такие как `Access-Control-Allow-Headers` или `Access-Control-Allow-Methods`, могут понадобиться для настройки CORS.
- Возможно, вам потребуется использовать прокси или сервер промежуточного уровня для отправки запросов, чтобы обойти ограничения CORS.

Надеюсь, это поможет вам решить проблему с отправкой POST-запросов через API транспортной компании на JavaScript.
В Вашем случае, API вероятно не настроено для разрешения запросов с вашего домена. 

Вам нужен любой сервер, для проксирования запроса. Выполните свой код на nodejs, и все заработает:
import {create} from './create.js';

const url = 'https://api.site.ru/endpoint';
const TOKEN = 'TOKEN';

const options = {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Basic ${btoa(`${TOKEN}:`)}`,
  },
  body: JSON.stringify({
    date: {
      from: '2024-07-01T00:00:00',
      to: '2024-07-09T00:00:00',
    },
  }),
};

fetch(url, options)
  .then((response) => response.json())
  .then((result) => create(result))
  .catch((error) => console.error(error.message));
Похожие вопросы