从 HTTP referer URL 中提取 field/property

Extract a field/property from HTTP referer URL

我有这个例子URL (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

我需要提取字段 'state' 的值。 (在本例中为 'somestate')。我试图用 substr() 来做,但我必须计算 base64 编码子字符串的长度。 (这不是动态或安全的)

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

非常感谢。

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

在处理标准数据格式时,不要尝试使用正则表达式或 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);

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

As an alternative, I would convert it to JSON and try to extract it from JSON.

这将是一个转移注意力的问题。要将其转换为 JSON,您首先需要对其进行解析。一旦你有了解析的数据,它仍然是将它转换为 JSON 只是为了立即将它转换回你已经拥有的解析数据。

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);