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

5 .net ssl credentials httpwebrequest

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

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

Ori*_*rds 5

服务器是使用HTTP基本身份验证还是其他类型?如果它使用HTTP basic,那么您可以将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();
Run Code Online (Sandbox Code Playgroud)

注意:根据我的经验,在.NET框架中有一些奇怪的行为.您认为它应该执行代码所说的内容,但它实际上是这样做的:

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

我不知道为什么它会这样做,因为它看起来很破碎,所以也许这是我的机器的一个怪癖,也许它不会发生在你身上.

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