如何在Web浏览器(如IE)中打开URL并传递凭据

16

我想打开一个需要基本身份验证的页面。 我想将基本身份验证标头与URL一起传递给浏览器。

我该如何做到这一点?


2
我正在尝试做这件事。有很多问题没有得到很好的答复。 - Erik Sapir
好的,针对你的问题,你想在URL中传递身份验证详细信息? - painotpi
据我所知,没有办法做到那样。 - abatishchev
1
@Erick Sapir:你无法控制典型浏览器发送的标题头。如果你嵌入一个网络浏览器控件,你可以访问发送的标题头,但这意味着你必须分发你的特殊浏览器。我的回答包括在URL中嵌入凭据并将其作为标题传递的历史方法。 - Brian Lyttle
如果您不介意使用默认的WebBrowser控件中的IE,您可以查看我的下面的答案,传递标头并告诉它在新窗口中打开。 - Billy Willoughby
5个回答

14

通过头文件,您可以:

string user = "uuuuuuu";
string pass = "ppppppp";
string authHdr = "Authorization: Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(user + ":" + pass)) + "\r\n";

webBrowserCtl.Navigate("http://example.com", null, null, authHdr);

考虑到这需要在每个请求的基础上完成,一个更简单的基本身份验证选项是只需;

webBrowserCtl.Navigate("http://uuuuuuu:ppppppp@example.com", null, null, authHdr);

我不想在应用程序的Web浏览器对象中打开它,而是在普通浏览器中打开。 - Erik Sapir
最后我采用了你的方法。它看起来甚至更好。 - Erik Sapir
在服务器端如何获取用户名和密码?我的意思是你正在转换为Base64字符串。我如何将信息提取回来? - Nick
通常通过服务器变量集合来实现,例如在PHP中使用$_SERVER['PHP_AUTH_USER'] - Alex K.

6

您可以尝试旧的“URL中”格式,这种方式允许此操作,但不安全:

http(s)://username:password@server/resource.ext

这会暴露凭据,IE已经禁用了它,但在其他浏览器中仍然可以使用。当使用此格式时,凭据对浏览器可用,并根据Web服务器的响应决定是否发送基本身份验证标头。


1
Chrome也已禁用了此功能。 - Billy Willoughby

2

尝试使用类似Watin的工具。 这里可以找到关于Watin的好的博客文章。

代码看起来像这样:

public void SearchForWatiNOnGoogle()
{
  using (var browser = new IE("http://www.google.com"))
  {
    browser.TextField(Find.ByName("q")).TypeText("WatiN");
    browser.Button(Find.ByName("btnG")).Click();
  }
}

上面的 Watin 链接已经失效。该项目可以在 SF 上找到,网址为 https://sourceforge.net/projects/watin/。 - Billy Willoughby
看起来Watin也可能已经死了。 - Billy Willoughby

0

.Net中的WebBrowser控件使用Internet Explorer作为其浏览器,因此如果您不介意使用IE,这是我编写的代码。 h5url是您想在窗口中打开的网址。我的程序甚至不显示浏览器控件,它会生成一个已登录网页的Internet Explorer实例。

     using (WebBrowser WebBrowser1 = new WebBrowser())
            {
                String auth =
                    System.Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(_User + ":" + _Password));
                string headers = "Authorization: Basic " + auth + "\r\n";
                WebBrowser1.Navigate(h5URL, "_blank", null, headers);

            }

这将打开一个新的浏览器,其中包含您需要进行身份验证的任何标头,基本的或其他方式。


0

首先检查这段代码:

Dim result As String

Using wClnt As New Net.WebClient

    wClnt.Credentials = New System.Net.NetworkCredential("username", "password")

    Using strR As New IO.StreamReader(wClnt.OpenRead("http://ADDRESS_To_READ"))

        result = strR.ReadToEnd

    End Using

End Using

如果这不是你想要的,请查看这篇文章,它可能会有所帮助: 如何使用WebClient登录网站? 更新:
这种方式不需要打开任何浏览器。只需请求您想要的地址并传递凭据即可。

3
非常感谢你给所有的回答投下反对票! - Afshin Gh
我很少在SO上看到这样的白痴。 - abatishchev
1
我认为downvote是因为他想在浏览器中做而不是在他的应用程序中做。并不是我认为你的答案不好。 - user7116

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接