我正在使用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);
}
答案 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
属性中还有Username
和Password
子属性。