【问题标题】:IdHTTP.Get not waiting for answerIdHTTP.Get 不等待回答
【发布时间】:2012-09-15 21:52:39
【问题描述】:

我在使用 Idhttp.Get 方法时遇到了一些问题。我认为它默认在阻塞模式下工作(等待答案转到下一行),但我只是看到它没有等待答案转到另一行。我将它与线程一起使用,但我认为这不是问题。代码是:

  IdHTTP1:= TIdHttp.Create(Application);
  IdHTTP1.ConnectTimeout:= 10000;
  IdHTTP1.Request.Clear;
  IdHTTP1.Request.BasicAuthentication:= true;
  IdHTTP1.Request.Username := Username;
  IdHTTP1.Request.Password := Password;
    try
      IdHTTP1.Get(PbxURL); **//this should STOP here and wait for answer don't?**
      HttpCode:= IdHTTP1.ResponseCode;
    except
      on E: EIdHTTPProtocolException do
        HttpCode := IdHTTP1.ResponseCode;
    end;
    if HttpCode=200 then
      Memo1.Lines.Append('Valid Get!');

所以,我只是注意到我没有得到正确的 HttpCode 值,因为在“获取”方法之后,它只是继续执行而不等待“获取”完成。我该如何解决这个问题??

【问题讨论】:

    标签: delphi delphi-2010 indy idhttp


    【解决方案1】:

    您说您没有获得正确的 HttpCode,这表明您正在获得一个 HttpCode,这意味着 Get 方法已等待获得结果所需的时间。p>

    如果您得到的响应代码是 301,那么您应该尝试设置 HandleRedirects 属性,以便它会使用返回的地址自动重新发出请求。否则,您必须自己处理响应。

    Get 函数不会过早返回。你误解了你观察到的东西。

    【讨论】:

    • 我同意。 Indy 专门使用阻塞套接字和阻塞操作,因此在Get() 首先退出之前,无论是正常退出还是通过引发的异常,您的代码都无法继续运行。
    • 是的,你是对的。当我使用线程时,我在错误的位置创建了 IdHTTP,并且它以这种方式工作。只是改变了创建我的 IdHTTP 对象的地方,它就起作用了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 2021-06-30
    相关资源
    最近更新 更多