如何解决401未授权错误?

8
我想从这个网站输出一些值:此网站。我使用浏览器检查器定位了URL到JSON,其中包含我想要的信息。有了JSON后,我可以很好地提取出价值。
问题是,该JSON的URL仅在有限的时间内有效。如果我稍后尝试访问它(通过浏览器或脚本的UrlFetch),我会得到一个:
{
"status": 401,
"response": "unauthorized"
}

由于我希望定期检查目标JSON文件,所以我想找到一种授权请求的方法。 有什么建议吗?

谢谢!

附:这是我迄今为止尝试过的(Google Apps脚本):

function getUserAndJSON(){
  var url = 'https://asunnot.oikotie.fi/api/cards?cardType=100&conditionType%5B%5D=1&conditionType%5B%5D=2&limit=24&locations=%5B%5B1669,4,%22Lauttasaari,%20Helsinki%22%5D,%5B14714,5,%2200340,%20Helsinki%22%5D%5D&lotOwnershipType%5B%5D=1&offset=0&price%5Bmax%5D=600000&price%5Bmin%5D=150000&roomCount%5B%5D=3&size%5Bmin%5D=35&sortBy=published_sort_desc';

  var opt = {
    "method": "GET", 
    "muteHttpExceptions": true,
    "escaping":false,
    "headers":JSON.parse(user)
  }
  var str = UrlFetchApp.fetch(url,opt).getContentText();
  Logger.log(str); //error 401
}

你能告诉我这个URL在网站上的位置吗?我需要看它的工作情况,然后可以检查它发送的请求头。正如你所看到的,你的URL具有端点和主体,但要查看标头,您需要查看请求标头。你也可以在浏览器中打开网络窗口,然后查看此API正在发出请求的位置。如果这行得通或需要其他帮助,请告诉我。 - 1UC1F3R616
@1UC1F3R616 网址是“本网站”下问题的第一个链接。我已经在开发工具中打开了网络选项卡,但是我找不到发送请求头的文件。帮助将不胜感激。谢谢 - jlo
问题是我不知道这个问题在哪里,整个网站都是用其他语言编写的。在网络选项卡下打开,然后单击任何API,现在侧边栏上会出现像“响应”,“请求头”等选项。您单击它们,然后进行检查。 - 1UC1F3R616
@ofirule 我该如何在状态响应中包含头信息? - jlo
1
@jlo 点击它们,然后会在侧边弹出一个窗口,我正在使用 Firefox。使用 Postman 来测试 API,在 Python 中有一个请求模块,你可以在其中发送头信息和 Cookie。 - 1UC1F3R616
显示剩余2条评论
1个回答

5

这个问题的一个解决方案是在浏览器检查器中(在我的情况下是Opera)使用“复制为... > 获取”选项,这会输出以下内容(与浏览器发送的头部有些不同):

fetch("https://asunnot.oikotie.fi/api/cards?cardType=100&conditionType%5B%5D=1&conditionType%5B%5D=2&limit=24&locations=%5B%5B1669,4,%22Lauttasaari,+Helsinki%22%5D,%5B14714,5,%2200340,+Helsinki%22%5D%5D&lotOwnershipType%5B%5D=1&offset=0&price%5Bmax%5D=600000&price%5Bmin%5D=150000&roomCount%5B%5D=3&size%5Bmin%5D=35&sortBy=published_sort_desc", {"credentials":"omit","headers":{"accept":"application/json","ota-cuid":"fd2a3a03d52a2721f9a9aa844ddf7eef2ac66ed6","ota-loaded":"1586685082","ota-token":"ab7e9f830a7dff3a9b01fbdcbc899ed7bfa659a4793103f1943e83ef5f938b16","sec-fetch-dest":"empty"},"referrer":"https://asunnot.oikotie.fi/myytavat-asunnot?conditionType%5B%5D=1&conditionType%5B%5D=2&locations=%5B%5B1669,4,%22Lauttasaari,%20Helsinki%22%5D,%5B14714,5,%2200340,%20Helsinki%22%5D%5D&lotOwnershipType%5B%5D=1&price%5Bmax%5D=600000&price%5Bmin%5D=150000&size%5Bmin%5D=35&roomCount%5B%5D=3&cardType=100","referrerPolicy":"no-referrer-when-downgrade","body":null,"method":"GET","mode":"cors"});

Copy as fetch

我在GAS中如下使用:

function testGetJSON(){
 var str = UrlFetchApp.fetch("https://asunnot.oikotie.fi/api/cards?cardType=100&conditionType%5B%5D=1&conditionType%5B%5D=2&limit=24&locations=%5B%5B1669,4,%22Lauttasaari,+Helsinki%22%5D,%5B14714,5,%2200340,+Helsinki%22%5D%5D&lotOwnershipType%5B%5D=1&offset=0&price%5Bmax%5D=600000&price%5Bmin%5D=150000&roomCount%5B%5D=3&size%5Bmin%5D=35&sortBy=published_sort_desc",
 {"credentials":"omit",
"headers":{"accept":"application/json","ota-cuid":"fd2a3a03d52a2721f9a9aa844ddf7eef2ac66ed6","ota-loaded":"1586685082","ota-token":"ab7e9f830a7dff3a9b01fbdcbc899ed7bfa659a4793103f1943e83ef5f938b16","sec-fetch-dest":"empty"},"referrer":"https://asunnot.oikotie.fi/myytavat-asunnot?conditionType%5B%5D=1&conditionType%5B%5D=2&locations=%5B%5B1669,4,%22Lauttasaari,%20Helsinki%22%5D,%5B14714,5,%2200340,%20Helsinki%22%5D%5D&lotOwnershipType%5B%5D=1&price%5Bmax%5D=600000&price%5Bmin%5D=150000&size%5Bmin%5D=35&roomCount%5B%5D=3&cardType=100","referrerPolicy":"no-referrer-when-downgrade","body":null,"method":"GET","mode":"cors"});
  Logger.log(str.getContentText());
}

这非常完美。

感谢大家的提示和建议!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接