从 URL 中提取 URL 参数?在 DELPHI
Extract URL parameters from URL? In DELPHI
我有一个传入的URL,我需要捕获一些参数,我们的项目在Delphi。这是 URL 的样子:
我需要在“state”之后和“code”之前获取值。
我正在使用来自 System.Net.URLClient.TURI
的 class
AURL = 'https://accounts.google.com/o/oauth2/approval/v2?auto=false&response=state%3DF409B222-B0B5-4AF0-B3A2-BC64DCEDA5B6%26code%3D4%2F1AY0e-g6kT90V4_L-HN_BkljW8XCAP79bVIaoE7ZErspKCTr83teAEPxbyHs%26scope%3Dprofile%2520openid%2520https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile%26authuser%3D0%26prompt%3Dconsent&approvalCode=4%2F1AY0e-g6kT90V4_L-HN_BkljW8XCAP79bVIaoE7ZErspKCTr83teAEPxbyHs#'
uri := TUri.Create(AUrl);
returnstate := uri.ParameterByName['state'];
使用 parameterbyname 时它是空的。
感谢您的帮助。
如评论中所述,您需要解码response
参数。
第一步是百分比解码。您可以为此使用 TURLEnconding
。
Response := TURLEncoding.Decode(uri.ParameterByName['response']);
然后,在编码的 &
字符处断开嵌入的 response
。可能有更简单的方法,但您可以使用 Pos
或 TPerlRegEx
。我认为一种快速的方法是使用 TStringList
并将 &
设置为 Delimiter
字符:
ResponseParams := TStringList.Create;
ResponseParams.Delimiter := '&';
ResponseParams.DelimitedText := Response;
然后,您就有了名称-值对,标准 TStringList
会为您将它们分开。
ResponseParams.Values['status']
我有一个传入的URL,我需要捕获一些参数,我们的项目在Delphi。这是 URL 的样子:
我需要在“state”之后和“code”之前获取值。 我正在使用来自 System.Net.URLClient.TURI
的 classAURL = 'https://accounts.google.com/o/oauth2/approval/v2?auto=false&response=state%3DF409B222-B0B5-4AF0-B3A2-BC64DCEDA5B6%26code%3D4%2F1AY0e-g6kT90V4_L-HN_BkljW8XCAP79bVIaoE7ZErspKCTr83teAEPxbyHs%26scope%3Dprofile%2520openid%2520https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile%26authuser%3D0%26prompt%3Dconsent&approvalCode=4%2F1AY0e-g6kT90V4_L-HN_BkljW8XCAP79bVIaoE7ZErspKCTr83teAEPxbyHs#'
uri := TUri.Create(AUrl);
returnstate := uri.ParameterByName['state'];
使用 parameterbyname 时它是空的。 感谢您的帮助。
如评论中所述,您需要解码response
参数。
第一步是百分比解码。您可以为此使用 TURLEnconding
。
Response := TURLEncoding.Decode(uri.ParameterByName['response']);
然后,在编码的 &
字符处断开嵌入的 response
。可能有更简单的方法,但您可以使用 Pos
或 TPerlRegEx
。我认为一种快速的方法是使用 TStringList
并将 &
设置为 Delimiter
字符:
ResponseParams := TStringList.Create;
ResponseParams.Delimiter := '&';
ResponseParams.DelimitedText := Response;
然后,您就有了名称-值对,标准 TStringList
会为您将它们分开。
ResponseParams.Values['status']