5

我正在尝试使用 HttpWebRequest 获取需要用户名和密码的 https URI。如果我将 URI 放入浏览器,它会弹出一个对话框,询问凭据然后工作。使用 HttpWebRequest 给我一个 401 Unauthorized 错误。

NetworkCredentials 的文档说它不支持 SSL,但我找不到我应该使用的东西。

4

1 回答 1

6

服务器是使用 HTTP 基本身份验证还是其他类型的身份验证?如果它使用 HTTP 基本,那么您可以将CredentialsWeb 请求上的属性设置为包含正确用户名和密码的凭据,并将该PreAuthenticate属性设置为 true。

这是一个示例(未经测试,因此仅用作指导):

var uri = new Uri("https://somesite.com/something");
var request = WebRequest.Create(uri) as HttpWebRequest;
request.Credentials = new NetworkCredential("myUserName","myPassword");
request.PreAuthenticate = true;

var response = request.GetResponse();

注意:根据我的经验,.NET 框架中有一些奇怪的行为。你会认为它应该按照代码所说的去做,但它实际上是这样做的:

  • 向没有凭据的服务器发送请求
  • 服务器响应 401
  • 使用您提供的凭据重新发送请求
  • 服务器接受请求。

我不知道它为什么会这样做,因为它似乎坏了,所以也许这是我机器的一个怪癖,也许它不会发生在你身上。

如果您的应用程序对性能不敏感,并且您的请求不是大数据的 POSTS,您可能不会注意到,但要绕过它,我必须手动构建 HTTP 基本身份验证标头并HttpWebRequest通过操作手动设置它Headers集合。

于 2009-06-03T21:00:37.023 回答