Извлечь поле / свойство из URL реферера HTTP - PullRequest
0 голосов
/ 11 октября 2018

У меня есть этот пример 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

Мне нужно извлечь значение поля 'state'.(который в этом случае будет 'somestate').Я пытался сделать это с помощью substr (), но мне нужно вычислить длину подстроки в кодировке base64.(что не является достаточно динамичным или безопасным)

В качестве альтернативы я бы преобразовал его в JSON и попытался извлечь его из JSON.

Большое спасибо.

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

При работе со стандартными форматами данных не пытайтесь свернуть свой собственный анализатор с помощью регулярных выражений или substr.Это URL.Найти существующий анализатор URL.

Node.js распространяется с одним !

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 global и url модуль, который вы можете require.Вам нужна относительно новая версия Node для использования URL global.Если у вас его нет, обновите установку Node.js.

В качестве альтернативы я бы преобразовал ее в JSON и попытался извлечь ее из JSON.

Это будет красная сельдь.Чтобы преобразовать его в формат JSON, сначала необходимо проанализировать его.Если у вас есть проанализированные данные, все равно будет преобразовано их в JSON только для немедленного преобразования обратно в уже проанализированные данные.

0 голосов
/ 11 октября 2018
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);
0 голосов
/ 11 октября 2018

Вам необходимо использовать встроенный в 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
...