从HTTP引荐来源网址提取字段/属性

时间:2018-10-11 13:24:08

标签: javascript node.js regex restify

我有这个示例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

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

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

非常感谢。

3 个答案:

答案 0 :(得分:3)

在处理标准数据格式时,请勿尝试使用正则表达式或substr滚动自己的解析器。这是一个URL。查找现有的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);

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

  

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

这将是一条红鲱鱼。要将其转换为JSON,您首先需要对其进行解析。拥有解析的数据后,仍然只能将其转换为JSON,而只是立即将其转换回已有的解析数据。

答案 1 :(得分: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);

答案 2 :(得分:1)

您需要使用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