Delphi 从URL提取URL参数?在德尔菲

Delphi 从URL提取URL参数?在德尔菲,delphi,url,pascal,lazarus,Delphi,Url,Pascal,Lazarus,我有一个传入的网址,我需要捕捉一些参数,我们的项目是在德尔福。以下是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-g6

我有一个传入的网址,我需要捕捉一些参数,我们的项目是在德尔福。以下是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时,它是空的。
感谢您的帮助。

如评论中所述,您需要解码
响应
参数

第一步是百分比解码。您可以为此使用
TURLEnconding

Response:=TURLEncoding.Decode(uri.ParameterByName['Response']);
然后,在编码的
&
字符处中断嵌入的
响应。可能有更简单的方法,但您可以使用
Pos
,或
TPerlRegEx
。我认为一个快速的方法是使用
TStringList
并将
&
设置为
分隔符
字符:

ResponseParams:=TStringList.Create;
ResponseParams.Delimiter:='&';
ResponseParams.DelimitedText:=响应;
然后,您有名称-值对,标准的
TStringList
将为您分隔这些名称-值对

ResponseParams.Values['status']

示例中的参数名称为
auto
response
approvalCode
。没有
状态
参数,它是
响应
参数值的一部分。我知道,我应该做一个循环吗?有更简单的方法吗?我看到在URL解码后,
响应
参数是另一组参数:
状态
代码
身份验证用户
提示
。我如何访问这些参数?i@Brian还有一个
范围
参数,谢谢