我正在尝试使用 HttpWebRequest 获取需要用户名和密码的 https URI。如果我将 URI 放入浏览器,它会弹出一个对话框,询问凭据然后工作。使用 HttpWebRequest 给我一个 401 Unauthorized 错误。
NetworkCredentials 的文档说它不支持 SSL,但我找不到我应该使用的东西。
我正在尝试使用 HttpWebRequest 获取需要用户名和密码的 https URI。如果我将 URI 放入浏览器,它会弹出一个对话框,询问凭据然后工作。使用 HttpWebRequest 给我一个 401 Unauthorized 错误。
NetworkCredentials 的文档说它不支持 SSL,但我找不到我应该使用的东西。
服务器是使用 HTTP 基本身份验证还是其他类型的身份验证?如果它使用 HTTP 基本,那么您可以将Credentials
Web 请求上的属性设置为包含正确用户名和密码的凭据,并将该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
集合。