![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Разбираемся с проблемой переадресации в TINetHttp для Delphi: сессия cPanel и исключение 12168Delphi , ОС и Железо , WindowsВопрос, заданный пользователем, касается проблемы переадресации, возникающей при использовании компонента TINetHttp в Delphi для подключения к cPanel различных интернет-провайдеров (ISP). При работе с одним ISP код работает корректно, но при использовании другого ISP возникает исключение с номером 12168, указывающее на то, что запрос на HTTP-переадресацию должен быть подтвержден пользователем. В результате глобальная переменная NewURL, в которую должна быть записана переадресация, остается пустой. Описание проблемыПользователь использует Delphi и компонент TINetHttp для входа в систему cPanel на сервере интернет-провайдера, для чего необходим сессионный код. При этом используется метод обратного вызова TINetHttp для получения адреса переадресации, через который можно извлечь сессионный код. С одним ISP код работает корректно, устанавливая глобальную переменную NewURL на адрес переадресации, с которого затем извлекается сессионный код. С другим ISP, при аналогичном URL, но другом доменном имени, происходит исключение 12168, и NewURL остается пустой строкой. Если же установить флаг flNoAutoRedirect в TRUE, вызывается другой способ извлечения сессионного кода, который заключается в разборе HTML код переадресованной страницы, без вызова метода обратного вызова. Этот способ работает для обоих ISP. Возможные причины проблемыВозможной причиной такого поведения является то, что один ISP возвращает код переадресации 302, а другой — 307. В случае с кодом 307, согласно спецификации, клиент должен повторить запрос с использованием нового URI, возвращаемого в заголовке Location ответа. Однако, если флаг flNoAutoRedirect установлен в TRUE, Delphi не осуществляет автоматическую переадресацию, как это происходит по умолчанию при получении кода 302. Рекомендуемое решениеДля надежного получения сессионного кода можно использовать следующий подход:
Примерный код для извлечения сессионного кода из HTML страницы:
Альтернативный способ получения переадресацииЕсли все же необходимо использовать механизм переадресации, можно обратить внимание на заголовок Location ответа, который содержит новый URI, с которым необходимо повторить запрос. Этот URI будет содержать сессионный код, необходимый для дальнейшей работы с системой cPanel. Пример кода для работы с TINetHttp
ЗаключениеПри работе с переадресацией в TINetHttp для Delphi важно понимать различия между типами кодов HTTP переадресации и соответствующее поведение компонента. В случае использования кода 307, необходимо самостоятельно повторить запрос с новым URI, полученным из заголовка Location ответа. Если же цель — просто получить сессионный код, то более надежным способом будет разбор HTML код переадресованной страницы, особенно если флаг flNoAutoRedirect установлен в TRUE. Пользователь столкнулся с проблемой переадресации в Delphi при использовании компонента TINetHttp для подключения к cPanel разных интернет-провайдеров, где с одним ISP все работает, а с другим возникает исключение, указывающее на необходимость подтвержде Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |