【问题标题】:Extract a field/property from HTTP referer URL从 HTTP 引用 URL 中提取字段/属性
【发布时间】:2018-10-11 21:54:03
【问题描述】:

我有这个示例 URL(引用)。

http://172.20.0.83:30923/oauth/authorize?client_id=8193654a-0b63-41df-953e-e6ae10807935&client_secret=somesecret&response_type=code&state=somestate=&redirect_uri=https://somestring.ngrok.io/api/oauthcallback

我需要提取字段“状态”的值。 (在这种情况下将是“某种状态”)。我试图用 substr() 来做,但我必须计算 base64 编码子字符串的长度。 (这不是动态或安全的)

作为替代方案,我会将其转换为 JSON 并尝试从 JSON 中提取它。

非常感谢。

【问题讨论】:

标签: javascript node.js regex restify


【解决方案1】:

在处理标准数据格式时,不要尝试使用正则表达式或 substr 来滚动您自己的解析器。这是一个网址。查找现有的 URL 解析器。

Node.js 是 distributed with one!

const referer = "http://172.20.0.83:30923/oauth/authorize?client_id=8193654a-0b63-41df-953e-e6ae10807935&client_secret=somesecret&response_type=code&state=somestate=&redirect_uri=https://somestring.ngrok.io/api/oauthcallback";
const parsed_url = new URL(referer);
const state = parsed_url.searchParams.get("state");
console.log(state);

注意:正如文档所述,Node 有两个 URL 解析器。 URL 全局和 url 模块,您可以使用 require。您需要一个相对较新的 Node 版本才能使用 URL 全局。如果没有,请升级您的 Node.js 安装。

作为替代方案,我会将其转换为 JSON 并尝试从 JSON 中提取它。

这将是一个红鲱鱼。要将其转换为 JSON,您首先需要对其进行解析。获得解析后的数据后,仍需将其转换为 JSON,以便立即将其转换回您已有的解析数据。

【讨论】:

    【解决方案2】:
    var url_string = "http://172.20.0.83:30923/oauth/authorize?client_id=8193654a-0b63-41df-953e-e6ae10807935&client_secret=somesecret&response_type=code&state=somestate=&redirect_uri=https://somestring.ngrok.io/api/oauthcallback"; // or you can use window.location.href
    var url = new URL(url_string);
    var c = url.searchParams.get("state");
    console.log(c);
    

    【讨论】:

      【解决方案3】:

      您需要使用 Node.js 内置的 querystring 模块。你可以这样使用它:

      var url = require('url');
      var querystring = require('querystring');
      
      var str = 'http://172.20.0.83:30923/oauth/authorize?client_id=8193654a-0b63-41df-953e-e6ae10807935&client_secret=somesecret&response_type=code&state=somestate&redirect_uri=https://somestring.ngrok.io/api/oauthcallback';
      
      var state = querystring.parse(url.parse(str).query).state; // somestate
      

      【讨论】:

      • 您在此处使用url 模块。 documentation 说:维护它仅仅是为了向后兼容现有的应用程序。新的应用程序代码应该使用 WHATWG API
      • @Quentin 是的,但这不是留下一个众所周知的有效 API 的理由。
      猜你喜欢
      • 2016-03-22
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多