При разработке веб-приложений на Delphi часто возникает необходимость извлечь параметры из URL. В этом материале мы рассмотрим, как извлечь параметры URL в Delphi с помощью класса TUri из библиотеки System.Net.URLClient.
Описание проблемы
Допустим, у нас есть входящий URL, из которого нам нужно извлечь некоторые параметры. Наш проект написан на Delphi, и мы используем класс TUri из библиотеки System.Net.URLClient для работы с URL. Однако, при попытке получить значение параметра state с помощью метода ParameterByName, он возвращает пустую строку. Как решить эту проблему?
Пример URL
Вот пример URL, из которого нам нужно извлечь параметры:
При ближайшем рассмотрении становится ясно, что параметр state не является отдельным параметром в URL. На самом деле, он является частью значения параметра response. Чтобы извлечь значение параметра state, нам нужно сначала декодировать значение параметра response и затем разобрать его на отдельные параметры.
Шаг 1: Декодирование значения параметра response
Первый шаг — декодировать значение параметра response с помощью класса TURLEncoding. Вот как это сделать:
uses
System.Net.URLClient;
var
uri: TUri;
response: string;
begin
uri := TUri.Create('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#');
response := TURLEncoding.Decode(uri.ParameterByName['response']);
end;
Шаг 2: Разбор значения параметра response на отдельные параметры
Теперь, когда у нас есть декодированное значение параметра response, нам нужно разобрать его на отдельные параметры. Одним из способов сделать это является использование класса TStringList и установки знака & в качестве разделителя. Вот как это сделать:
uses
System.Classes;
var
responseParams: TStringList;
begin
responseParams := TStringList.Create;
responseParams.Delimiter := '&';
responseParams.DelimitedText := response;
end;
Теперь у нас есть список параметров, разделенных знаком &. Чтобы получить значение параметра state, мы можем использовать индексатор TStringList следующим образом:
var
state: string;
begin
state := responseParams.Values['state'];
end;
Альтернативный ответ
Если вы хотите извлечь все параметры из URL, а не только параметр state, вы можете использовать цикл for для перебора всех параметров в списке responseParams. Вот как это сделать:
var
paramName, paramValue: string;
begin
for paramName in responseParams.Keys do
begin
paramValue := responseParams[paramName];
// Здесь можно выполнить действия с каждым параметром
end;
end;
Заключение
В этом материале мы рассмотрели, как извлечь параметры URL в Delphi с помощью класса TUri. Мы узнали, что иногда параметры могут быть закодированы и спрятаны внутри других параметров. Чтобы извлечь такие параметры, нам нужно сначала декодировать их родительский параметр и затем разобрать его на отдельные параметры. Мы также рассмотрели альтернативный способ извлечения всех параметров из URL с помощью цикла for. Надеемся, что эта информация поможет вам работать с URL-параметрами в ваших Delphi-проектах.
Материал посвящен извлечению параметров URL в Delphi с помощью класса TUri.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.