gpt4 book ai didi

delphi - TIdHTTP - 仅获取响应代码

转载 作者:行者123 更新时间:2023-12-03 19:13:37 25 4
gpt4 key购买 nike

我正在使用 TIdHTTP组件,它是 GET功能。
GET函数发送一个完整的请求,这很好。

但是,我想从 GET 响应中节省/保存一些流量,并且只想接收位于 HTTP 响应的第一“行”中的 Responsecode。

是否有可能断开连接以节省更多内容的流量?

如前所述,我只需要来自网站的响应代码。

我还考虑过使用 Indy 的 TCP 组件(带有 SSL IOHandler)并制作自己的 HTTP 请求 header ,然后接收响应代码并在成功时断开连接 - 但我不知道该怎么做。

最佳答案

TIdHTTP有一个 OnHeadersAvailable旨在完成这项任务的事件。它在读取响应 header 之后和读取正文内容(如果有)之前触发。它有一个 VContinue您可以将其设置为 False 以取消任何进一步阅读的输出参数。

更新 :我刚刚发现的东西:设置VContinue=False时在 OnHeadersAvailable事件,TIdHTTP将设置 Response.KeepAlive=False并跳过阅读响应正文(到目前为止还可以),但在处理完响应后,TIdHTTP检查KeepAlive值,如果服务器端没有关闭套接字,则属性 getter 返回 True(HTTP 1.1 默认使用 keep-alives)。这会导致 TIdHTTP不关闭其套接字的末端,并将留下任何未读的响应正文。如果你再使用相同的TIdHTTP对象为新的 HTTP 请求,它最终会在看到新请求的响应 header 之前处理来自先前响应的任何未读取的正文数据。

您可以通过设置 Request.Connection 来解决此问题。属性(property)给 'close'在调用 TIdHTTP.Get() 之前.这告诉服务器在发送响应后关闭其套接字连接的结尾(尽管我刚刚发现在请求 HTTPS url 时,尤其是在 HTTP 请求指向 HTTPS 之后,TIdHTTP 清除了 Request.Connection 值!)。或者,只需调用 TIdHTTP.Disconnect()TIdHTTP.Get() 之后退出。

我现在更新了TIdHTTP到:

  • 不再清除Request.Connection准备 HTTPS 请求时。
  • 如果出现以下任一情况,请关闭其套接字连接的末端:
  • OnHeadersAvailable返回 VContinue=False
  • Request.Connection属性(或者,如果连接到代理,则 Request.ProxyConnection 属性)已设置为 'close' ,无论服务器的响应如何。
  • 关于delphi - TIdHTTP - 仅获取响应代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42466869/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com