I have an incoming URL which I need to catch some parameters, our project is in Delphi. Here is what the URL looks like :
I need to get the value right after "state" and before'code'. I am using a class from 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'];
When using the parameterbyname it's empty. Appreciate the help.
As stated in the comments, you need to decode the response parameter.
First step is percent decoding. You can use TURLEnconding for this.
Response := TURLEncoding.Decode(uri.ParameterByName['response']);
Then, break the embedded response at the encoded & characters. There may be an easier way to do it, but you could use Pos, or a TPerlRegEx. I think a quick way would be to use a TStringList and set the & as the Delimiter character:
ResponseParams := TStringList.Create;
ResponseParams.Delimiter := '&';
ResponseParams.DelimitedText := Response;
Then, you have name-value pairs and a standard TStringList will separate those for you.
ResponseParams.Values['status']