Ответ авторизации TIdHTTP-> Connect () для получения идентификатора сеанса - PullRequest
0 голосов
/ 28 января 2019

Я использую компонент TIdHTTP для подключения к своему серверу.Я использую следующий код для этого (это не полный код, я удалил ненужные строки кода).С помощью приведенного ниже кода я могу подключиться к серверу и отправить ему запрос GET.

Мой запрос во время авторизации (при вызове Connect) сервер отправляет sessionID, который требуется при выполнении запроса GET.Как я могу получить этот идентификатор сеанса после успешного вызова http->Connect()?

Если я использую GET запрос на авторизацию, тогда я получаю идентификатор сеанса с помощью диспетчера файлов cookie.Но мне интересно, смогу ли я получить это, используя Connect() вызов.

 TIdHTTP* http = new TIdHTTP();
 /// Code to set IO handler and setting custom headers
 http->Connect(ipAddress,port);

 if(http->Connected())
 {
    http->Get(url,memStream);
 }

1 Ответ

0 голосов
/ 29 января 2019

Ответ на ваш вопрос - НЕТ, вы не можете получить идентификатор сеанса от Connect(), потому что получение идентификатора сеанса требует, чтобы вы сначала сделали HTTP-запрос, чтобы сервер мог отправить ответ, а Connect() - нет.отправив любой запрос, он просто открывает базовое сокетное соединение с портом прослушивания сервера.Фактический запрос не отправляется, пока вы не вызовете метод TIdHTTP::Get() (или любой другой метод запроса - Post(), Put(), Delete() и т. Д.).

Кроме того, вы не должны бытьвызов метода TIdHTTP::Connect() вручную вообще .HTTP - это протокол без сохранения состояния, нет гарантии (или необходимости), что соединение TCP будет сохраняться между несколькими запросами к одному и тому же серверу.Это согласовывается между клиентом и сервером для каждого отдельного запроса, и TIdHTTP обрабатывает это внутренне, (повторно) подключаясь по мере необходимости для каждого отправленного запроса.Все, что вам нужно сделать, это указать URL-адрес Get() (или любой другой запрос, который вам нужен), а затем TIdHTTP анализирует его для извлечения информации о порте host: и управления соответствующим образом сокетным соединением.

Еслисерверу требуется аутентификация на уровне HTTP (в отличие от аутентификации на основе веб-формы), он запросит это в ответе, который обрабатывается TIdHTTP, если в свойстве TOdHTTP::HTTPOptions включен флаг hoProcessAuth, что вызывает запуск TIdHTTP::On(Select)Authorization событий по мере необходимости, поэтому он может повторить запрос с добавленной информацией аутентификации.В свойстве TIdHTTP::Request доступны также подвойства Username и Password.

...