使用客户端凭据通过SSL进行HttpWebRequest

时间:2009-06-03 20:40:14

标签: .net ssl httpwebrequest credentials

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

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

1 个答案:

答案 0 :(得分:5)

服务器是使用HTTP基本身份验证还是其他类型?如果它使用HTTP basic,那么您可以将Web请求中的Credentials属性设置为包含正确用户名和密码的凭据,并将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集合。