我一直在使用邮递员来测试一个我能成功调用的API。
当我尝试通过javascript执行此调用时,我收到了身份验证错误。
网址和授权与邮差调用相匹配,当我使用curl调用这些详细信息时,我能够检索到正确的数据。
<script type="text/javascript">
var data = new FormData();
data.append("attributeId", "");
data.append("validFrom", "");
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === 4) {
console.log(this.responseText);
}
});
xhr.open("GET", "http:/restpAPI/test");
xhr.setRequestHeader("authorization", "Basic asdsadsadjlafdkfjkldfj==");
xhr.setRequestHeader("cache-control", "no-cache");
xhr.setRequestHeader("postman-token", "dsadasd-asdsad-asd-asd-aasd");
xhr.send(data);
</script>
当我使用此脚本运行本地网页时,我得到401说未授权。
JavaScript代码和postman或cURL之间有什么区别,有没有一种从JavaScript进行身份验证的方法?
更新
我发现使用授权密钥设置RequestHeader会将请求从get转换为选项。这导致错误。
答案 0 :(得分:1)
虽然HTTP标头应该不区分大小写,您是否尝试使用标题大小写(var fetchedResultsController: NSFetchedResultsController {
let moc = DatabaseController.sharedInstance.managedObjectContext
let fetchRequest = NSFetchRequest()
let entity = NSEntityDescription.entityForName("Coctail", inManagedObjectContext: moc)
fetchRequest.entity = entity
fetchRequest.fetchLimit = 10
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)]
let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest,
managedObjectContext: moc,
sectionNameKeyPath: nil,
cacheName: nil)
aFetchedResultsController.delegate = self
do {
try aFetchedResultsController.performFetch()
} catch {
fatalError("\(error)")
}
return aFetchedResultsController
}
)设置标题名称?