javascript - Companies House API jquery ajax 返回 401
问题描述
我正在尝试从 gov.uk 公司内部 API 返回 json,但我得到了 401
加载资源失败:服务器响应状态为 401(未授权)
我正在使用 ajax() 方法使用 jQuery,我的代码如下所示:
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 密钥进行测试。我还在终端中使用 curl 命令返回了 json
curl -u{{MYAPIKEY}}: https://api.companieshouse.gov.uk/company/09963675
解决方案
可能您获得的 URL 与您预期的不同(使用?
, 因为这是data
在 GET 请求中附加到 URL 的方式)。
您需要添加company_number
到 URL(并适当地删除dataType: 'jsonp'
):
url: "https://api.companieshouse.gov.uk/company/" + company_number,
下面的片段在 3 种情况下显示了您的请求的 URL:
- 您当前的代码
dataType: 'jsonp'
删除后的代码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>
推荐阅读
- python - Python stdout 和 stdout.buffer 捕获
- python - Python Regex 获取字符串中所有出现的 4 位数字
- python - 您可以将列表转换为 df 并保留列表的一部分吗?
- django - 为 Django 管理操作创建单元测试时遇到问题
- python - 如何从目录导入模块
- sql-server - 将分片数据库从自托管移动到 Azure 数据库后登录失败
- php - 如何在wordpress的主页上放置一些集合
- python - 在 Pyspark EMR 引导程序中安装 Python 包
- algorithm - 生成图边的高效算法
- ruby-on-rails - 检查是否从rspec中不同类的方法调用了一个类的方法