我正在尝试使用HttpWebRequest来获取需要用户名和密码的https URI。如果我将URI放入浏览器,它会弹出一个对话框,询问凭据然后工作。使用HttpWebRequest给我一个401 Unauthorized错误。
NetworkCredentials的文档说它不支持SSL,但我找不到我应该使用的内容。
答案 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框架中存在一些奇怪的行为。你认为它应该做代码所说的,但它实际上是这样做的:
我不知道为什么它会这样做,因为它似乎已经坏了,所以也许这是我机器的一个怪癖,也许它不会发生在你身上。
如果您的应用程序对性能不敏感,并且您的请求不是大数据的POSTS,您可能不会注意到,但为了解决它,我必须手动构建HTTP基本身份验证标头并将其设置为HttpWebRequest
手动操作Headers
集合。