Заголовок Api-версии отправляется неправильно - PullRequest
0 голосов
/ 27 ноября 2018

Дорогие друзья, у меня странная проблема: я пытаюсь подключиться к API, и когда я пытаюсь выполнить запросы API в почтальоне или бессоннице, все в порядке.Когда я использую один и тот же код на своем веб-сайте и даже на локальном хосте, запрос потенциальных клиентов не работает и сообщает, что api-версия не определена.

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
    var settings = {
        "async": true,
        "crossDomain": true,
        "url": "https://affiliate-api.tradingcrm.com:4477/token",
        "method": "POST",
        "data": "{ userName: \"alpt\", password: \"Alpt@12345\" }"
    }

    $.ajax(settings).done(function (response) {
        var settings2 = {
            "async": true,
            "crossDomain": true,
            "url": "https://affiliate-api.tradingcrm.com:4477/accounts/lead",
            "method": "POST",
            "headers": {
                "Authorization": "Bearer " + response.Token,
                "Api-Version": "3",
                "Content-Type": "application/json"
            },
            "data": "{firstName:\"test\",lastName:\"test2\",email:\"test@test.test\"}"
        }
        
        $.ajax(settings2).done(function (response2) {
            console.log(response2.accountId);
        });
    });
</script>

enter image description here

1 Ответ

0 голосов
/ 30 ноября 2018

Проблема CORS , на сервере API отсутствует заголовок Access-Control-Allow-Headers, поэтому вы не можете установить настраиваемый заголовок запроса, например "Api-Version": "3", решение использует прокси-сервер CORS или получает данные с вашего сервера или просит вашего провайдерадобавьте его.

Почтальон отличается тем, что почтальон не спрашивает серверный API, он просто отправляет заголовки, а Browser, потому что другому домену он будет запрашивать, выполняя OPTIONS запрос со следующими заголовками до Postзапрос сделан.

Access-Control-Request-Headers: api-version,authorization,content-type

Затем серверный API должен ответить заголовками

Access-Control-Allow-Headers: api-version,authorization,content-type

Тест прокси-сервера CORS:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
  var settings = {
    "async": true,
    "crossDomain": true,
    "url": "https://affiliate-api.tradingcrm.com:4477/token",
    "method": "POST",
    "data": "{ userName: \"alpt\", password: \"Alpt@12345\" }"
  }

  $.ajax(settings).done(function(response) {
    console.log('requesting using CORS Proxy.....');
    var settings2 = {
      "async": true,
      "crossDomain": true,
      "url": "https://cors-anywhere.herokuapp.com/https://affiliate-api.tradingcrm.com:4477/accounts/lead",
      "method": "POST",
      "headers": {
        "Authorization": "Bearer " + response.Token,
        "Api-Version": "3",
        "Content-Type": "application/json"
      },
      "data": "{firstName:\"test\",lastName:\"test2\",email:\"test@test.test\"}"
    }

    $.ajax(settings2)
    .done(function(response2) {
      console.log(response2.accountId);
    })
    .fail(function(jqXHR, textStatus) {
      console.log(textStatus);
      console.log(jqXHR.responseText);
    });
  })

</script>
...