TIdHTTP-> Connect()的授权响应以获取会话ID

时间:2019-01-28 11:32:55

标签: c++builder indy10 idhttp rad-studio

我正在使用TIdHTTP组件连接到我的服务器。我为此使用以下代码(这不是完整的代码,我删除了不必要的代码行)。使用以下代码,我可以连接到服务器,并且可以向它发送一个GET请求。

我的查询是在授权期间(在Connect调用中),服务器发送了一个sessionID,这是发出GET请求时所必需的。 http->Connect()调用成功后,如何获取该sessionID?

如果我使用GET进行授权,则使用Cookie管理器获取会话ID。但是我很想知道是否可以使用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 :(得分:0)

您的问题的答案是-不,您无法从Connect()获取会话ID,因为获取会话ID要求您首先发出HTTP请求,以便服务器可以发送响应,并且{{1 }}不发送任何请求,它只是打开与服务器侦听端口的基础套接字连接。直到您调用Connect()方法(或任何其他请求方法-TIdHTTP::Get()Post()Put()等),才发送实际请求。

此外,您完全不应手动 调用Delete()方法。 HTTP是一种无状态协议,不能保证(或不需要)TCP连接在同一服务器的多个请求之间持久存在。这是在客户端和服务器之间根据每个请求进行协商的,TIdHTTP::Connect()在内部进行处理,并根据需要为每个发送的请求进行(重新)连接。您要做的就是向TIdHTTP提供URL(或您需要的任何请求),然后Get()对其进行解析以提取host:port信息并相应地管理套接字连接。

如果服务器需要HTTP级别的身份验证(而不是基于Webform的身份验证),则它将在响应中进行询问,如果您在服务器中启用了TIdHTTP标志,则TIdHTTP将对此进行处理。 hoProcessAuth属性,从而根据需要触发TOdHTTP::HTTPOptions事件,因此它可以在添加身份验证信息后重试请求。 TIdHTTP::On(Select)Authorization属性中还有UsernamePassword子属性。