Дом Компании API jquery AJAX возвращая 401 - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь вернуть json из API компании gov.uk, но получаю 401

Не удалось загрузить ресурс: сервер ответил со статусом 401 (не авторизовано)

Я использую jQuery с использованием метода ajax (), и мой код выглядит следующим образом:

var chApiKey = "{{MYAPIKEY}}:";
var company_number = "09963675";

$.ajax({
  async: false,
  url: "https://api.companieshouse.gov.uk/company/",
  type: "GET",
  crossDomain: true,
  contentType: "application/json",
  data: company_number,
  dataType: 'jsonp',
  success: function(data) {
    //Response text
    alert(data);
  },
  beforeSend: function(xhr) {
    xhr.withCredentials = true;
    xhr.setRequestHeader("Authorization", make_base_auth(encodeURIComponent(chApiKey)))
    // xhr.setRequestHeader ("Authorization", make_base_auth(chApiKey))
  },
  error: function() {
    //Gat failure
    console.log("error");
  }
});

function make_base_auth(user) {
  // var user = user + ":"
  console.log("the api is: " + user)
  var hash = btoa(user);
  return "Basic " + hash;
  // console.log("Basic " + hash + ":");
}

Инструкции на gov.uk позволяют вампроверить с вами ключ API, который работает.Я также вернул json с помощью команды curl в терминале

curl -u{{MYAPIKEY}}: https://api.companieshouse.gov.uk/company/09963675

Ответы [ 2 ]

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

В настройках приложения https://developer.companieshouse.gov.uk поле с надписью: Домены JavaScript должно:

  • включать номер порта, если используется
  • Не можетbe localhost

Для локальной установки обновите файл hosts и обновите домены JavaScripts в настройках приложения.

Я допустил ошибку, не указав в этом поле: 3000.поэтому мой локальный домен был http://ch -test.com , но должен был иметь значение http://ch -test.com: 3000 , так как мой http-сервер работал на порту 3000.

В дополнение к другим отзывы также изменились

dataType: 'jsonp', => dataType: 'json',

async: true, => async: false,

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

Вероятно, вы получите другой URL, чем вы ожидаете (с ?, потому что именно так data добавлено в запросе GET к URL).

Вам необходимо добавить company_number к URL (и возможно удалить dataType: 'jsonp'):

url: "https://api.companieshouse.gov.uk/company/" + company_number,

Фрагмент ниже показывает URL для вашего запроса в 3 случаях:

  1. ваш текущий код
  2. Ваш код после dataType: 'jsonp' удаления
  3. company_number добавлено непосредственно к URL

var chApiKey = "{{MYAPIKEY}}:";
var company_number = "09963675";

$.ajax({
  async: false,
  url: "https://api.companieshouse.gov.uk/company/",
  type: "GET",
  crossDomain: true,
  contentType: "application/json",
  data: company_number,
  dataType: 'jsonp',
  success: function(data) {
    //Response text
    alert(data);
  },
  beforeSend: function(xhr, settings) {
    console.log("dataType: 'jsonp' :", settings.url)
    xhr.withCredentials = true;
    xhr.setRequestHeader("Authorization", make_base_auth(encodeURIComponent(chApiKey)))
    // xhr.setRequestHeader ("Authorization", make_base_auth(chApiKey))
  },
  error: function() {
    //Gat failure
    //console.log("error");
  }
});

function make_base_auth(user) {
  // var user = user + ":"
  //console.log("the api is: " + user)
  var hash = btoa(user);
  return "Basic " + hash;
  // console.log("Basic " + hash + ":");
}

$.ajax({
  async: false,
  url: "https://api.companieshouse.gov.uk/company/",
  type: "GET",
  crossDomain: true,
  contentType: "application/json",
  data: company_number,
  success: function(data) {
    //Response text
    alert(data);
  },
  beforeSend: function(xhr, settings) {
    console.log("dataType: 'jsonp' removed  :", settings.url)
    xhr.withCredentials = true;
    xhr.setRequestHeader("Authorization", make_base_auth(encodeURIComponent(chApiKey)))
    // xhr.setRequestHeader ("Authorization", make_base_auth(chApiKey))
  },
  error: function() {
    //Gat failure
    //console.log("error");
  }
});

$.ajax({
  async: false,
  url: "https://api.companieshouse.gov.uk/company/" + company_number,
  type: "GET",
  crossDomain: true,
  contentType: "application/json",
  success: function(data) {
    //Response text
    alert(data);
  },
  beforeSend: function(xhr, settings) {
    console.log("company number added in url  :", settings.url)
    xhr.withCredentials = true;
    xhr.setRequestHeader("Authorization", make_base_auth(encodeURIComponent(chApiKey)))
    // xhr.setRequestHeader ("Authorization", make_base_auth(chApiKey))
  },
  error: function() {
    //Gat failure
    //console.log("error");
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...