【问题标题】:How open a url with http authentication in Delphi?如何在 Delphi 中打开带有 http 身份验证的 url?
【发布时间】:2011-10-07 13:32:05
【问题描述】:

如何打开需要“http 身份验证”的url(浏览器窗口)以透明的方式传递登录名和密码? delphi 中的旧版应用程序需要从 Reporting Services 打开“.aspx”中的报表。

谢谢,塞尔索

【问题讨论】:

    标签: delphi http http-authentication delphi-5


    【解决方案1】:

    使用 Indy TidHTTP 组件,因为它可以轻松处理身份验证要求。将组件放在表单上,​​然后:

    IdHTTP1.Request.UserName := 'xxx';
    IdHTTP1.Request.Password := 'xxx';
    IdHTTP1.Get(x);
    

    我相信这适用于您可能拥有的任何 Indy 版本。

    【讨论】:

    • 你可以在 Delphi 5 中使用 Indy。我愿意。
    • IdHTTP 中也有一个 BasicAuthentication 属性(布尔值),我将其设置为 true 以使代码更自我解释
    • 有办法将 TidHTTP 放入 Delphi 5 而不安装“组件”,也许只使用生成单元?
    • 只要源代码在您的项目或库路径中,您不一定需要安装可视化组件来使用 Indy。如果您想要更轻的选择,您也可以查看 Synapse。
    【解决方案2】:

    可以使用WinHTTP,查看IWinHttpRequest.SetCredentials方法

    检查此示例

    uses
      Variants,
      SysUtils,
      WinHttp_TLB;
    
    
    Const
      HTTPREQUEST_SETCREDENTIALS_FOR_SERVER = 0;
    Var
      Http: IWinHttpRequest;
    begin
      try
       Http := CoWinHttpRequest.Create;
       try
         Http.Open('GET', 'http://Foo.com/home', False);
         Http.SetCredentials('AUser','APassword', HTTPREQUEST_SETCREDENTIALS_FOR_SERVER);
         Http.Send(EmptyParam);
    
         //Do your stuff
    
       finally
         Http:=nil;
       end;
      except
        on E:Exception do
          Writeln(E.Classname, ': ', E.Message);
      end;
    end.
    

    【讨论】:

    • 不,因为 WinHttp(Windows HTTP 服务)是 Windows 的一部分。
    • 这个“http.open”真的会打开浏览器吗?因为我需要这个
    • 不,该组件用于检索网页内容或下载http资源。
    【解决方案3】:

    如果可以接受,您可以只在其中包含用户名和密码的 URL。

    http://username:password@www.mysite.com/page.aspx

    【讨论】:

    • firefox 很酷(尽管有警告)...但在 ie 中不起作用
    • 默认IE不支持。看看这里如何改变它:support.microsoft.com/kb/834489
    • 我不建议您在 URL 中以纯文本形式发送密码。
    • 这也不在 HTTP RFC 标准中,更多的是“异国情调”
    • @mjn:不,它不在 HTTP 规范中,因为“http” URL 方案实际上并不是 HTTP 本身的一部分。 URL 的一般格式在 RFC 3986 中单独定义,它确实定义了 URL 中用户名和密码的使用(参见第 3.2 节)。任何解析“http”URL(即网络浏览器或其他 HTTP 客户端)的人都应该将 URL 分成单独的组件,然后发送带有适当“授权”标头的 HTTP 请求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多