从 URL 中提取 URL 参数?在德尔福

问题描述 投票:0回答:2

我有一个传入的 URL,我需要捕获一些参数,我们的项目是在 Delphi 中。这是 URL 的样子:

我需要在“state”之后和“code”之前获取值。 我正在使用 System.Net.URLClient.TURI 中的一个类

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 时它是空的。 感谢帮助。

delphi url pascal lazarus
2个回答
2
投票

如评论中所述,您需要解码

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']

0
投票

@Remy:这在所有情况下都无法正常工作...... 响应已解码,可能包含空格 (%20 -> ' ')

TStrings.DelimitedText 只会添加包含空格的引号字符串! (参见 System.classes:7361

© www.soinside.com 2019 - 2024. All rights reserved.