C# C HttpWebRequest-预验证:仍然返回401禁止(HTTPS)

C# C HttpWebRequest-预验证:仍然返回401禁止(HTTPS),c#,authentication,httpwebrequest,C#,Authentication,Httpwebrequest,我想请你帮助我快速编写以下代码,因为我总是得到403禁止 HttpWebRequest pozadavek = (HttpWebRequest)WebRequest.Create("LINK THAT ASKS FOR AUTHLOGIN"); //https System.IO.StreamReader stream = null; System.String result = null; public Form1() { InitializeC

我想请你帮助我快速编写以下代码,因为我总是得到403禁止

HttpWebRequest pozadavek = (HttpWebRequest)WebRequest.Create("LINK THAT ASKS FOR AUTHLOGIN"); //https
    System.IO.StreamReader stream = null;
    System.String result = null;
    public Form1()
    {
        InitializeComponent();
        pozadavek.AuthenticationLevel = System.Net.Security.AuthenticationLevel.MutualAuthRequested;
        pozadavek.Credentials = new NetworkCredential("NAME", "PASS");
        pozadavek.PreAuthenticate = true;
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        WebResponse webresponse = pozadavek.GetResponse(); //throws an exception:403 forbidden
        stream = new System.IO.StreamReader(webresponse.GetResponseStream());
        result = stream.ReadToEnd();
        this.webBrowser1.DocumentText = result;
    }

您试图打开的站点需要基本身份验证。底线是,您需要将用户名/密码包含在与您的请求一起编码的base64中。幸运的是,.Net为您做到了这一点。按如下方式构造您的请求:

var credCache = new CredentialCache();
credCache.Add(new Uri("https://is.vsfs.cz/auth"), "Basic",
                  new NetworkCredential("user", "pwd"));
var request = (HttpWebRequest)WebRequest.Create(uri);
request.Credentials = credCache;

更详细地解释如何在.Net中处理各种身份验证方案。

您试图打开的站点需要基本身份验证。底线是,您需要将用户名/密码包含在与您的请求一起编码的base64中。幸运的是,.Net为您做到了这一点。按如下方式构造您的请求:

var credCache = new CredentialCache();
credCache.Add(new Uri("https://is.vsfs.cz/auth"), "Basic",
                  new NetworkCredential("user", "pwd"));
var request = (HttpWebRequest)WebRequest.Create(uri);
request.Credentials = credCache;

更详细地解释如何在.Net中处理各种身份验证方案。

这段代码在4ME中工作

Uri address = new Uri("https://www.example.com");
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address);
string authInfo = username + ":" +password;
authInfo = Convert.ToBase64String(Encoding.UTF8.GetBytes(authInfo));
request.Headers.Add("Authorization", "Basic " + authInfo);
NetworkCredential myCreds = new NetworkCredential(username, password);
request.Credentials = myCreds;
request.Method = WebRequestMethods.Http.Get;
request.AllowAutoRedirect = true;
request.Proxy = null;

这个代码对我有用

Uri address = new Uri("https://www.example.com");
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address);
string authInfo = username + ":" +password;
authInfo = Convert.ToBase64String(Encoding.UTF8.GetBytes(authInfo));
request.Headers.Add("Authorization", "Basic " + authInfo);
NetworkCredential myCreds = new NetworkCredential(username, password);
request.Credentials = myCreds;
request.Method = WebRequestMethods.Http.Get;
request.AllowAutoRedirect = true;
request.Proxy = null;

不,无论是真是假,都是一样的。我不确定这是否是正确的方式,在浏览器中打开链接将打开一个弹出窗口,询问用户名和密码。如果通过弹出窗口进行身份验证,则最初会在客户端强制执行。你的要求永远也看不到。听起来该站点正在使用某种形式的身份验证。也许你可以获得登录页面的直接url,但即使使用Credentials属性也可能不起作用,你必须使用POST请求将username/pwd发送到该页面。哦,我可以看到有https。我已经更改了程序中的URI,现在得到401…有什么想法吗?401仍然意味着你没有被授权。您应该直接获取登录页面的url,并构造一个页面将接受的帖子。否,无论是true还是false,都是相同的。我不确定这是否是正确的方式,在浏览器中打开链接将打开一个弹出窗口,询问用户名和密码。如果通过弹出窗口进行身份验证,则最初会在客户端强制执行。你的要求永远也看不到。听起来该站点正在使用某种形式的身份验证。也许你可以获得登录页面的直接url,但即使使用Credentials属性也可能不起作用,你必须使用POST请求将username/pwd发送到该页面。哦,我可以看到有https。我已经更改了程序中的URI,现在得到401…有什么想法吗?401仍然意味着你没有被授权。您应该直接获得登录页面的url,并构造一个页面将接受的帖子。