【问题标题】:How to get around a 401 unauthorized error?如何绕过 401 未经授权的错误?
【发布时间】:2020-04-03 08:51:14
【问题描述】:

我想从this site 输出一些值。通过浏览器检查器,我将URL 定位到具有我想要的信息的 JSON 中。使用 JSON 后,我可以很好地提取值。

问题在于 JSON 的 URL 仅在有限的时间内有效。如果我稍后尝试访问它(通过浏览器或通过脚本的 UrlFetch),我会得到:

{
"status": 401,
"response": "unauthorized"
}

由于我想定期检查目标 JSON,我想找到一种方法来授权请求​​。有任何想法吗?

谢谢!

PS:这是我迄今为止尝试过的(谷歌应用脚​​本):

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 具有端点和正文,但要查看标头,您需要查看请求标头。您也可以在浏览器中通过打开您的网络窗口并查看此 api 发出请求的位置来执行此操作。让我知道这是否有效或需要任何其他帮助。
  • @1UC1F3R616 该网址是“此站点”下问题的第一个链接。我在开发工具下打开了网络选项卡,但我找不到发送请求标头的文件。帮助将不胜感激。干杯
  • 问题是我看不到这个问题在哪里,整个网站都是用其他语言写的。在network选项卡下打开,然后点击任何api,现在旁边会出现Response,Request Header等选项。你点击它们然后检查它。
  • 请提供包括标题在内的整个 401 状态响应。这将为您提供有关身份验证类型的提示,然后您可以使用它在每次收到 401 消息时生成令牌。公平使用身份验证机制的示例:en.wikipedia.org/wiki/Basic_access_authentication
  • @jlo 点击它们,然后会弹出一个窗口,我正在使用 Firefox。使用 Postman 测试 api,在 python 中有一个请求模块,你可以在其中发送 headers 和 cookie。

标签: javascript json web-scraping


【解决方案1】:

这个问题的一个解决方案是在浏览器检查器(在我的例子中是 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"});

我在 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());
}

效果很好。

感谢大家的提示和建议!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多