2010-02-08 1 views
1

Я хотел бы попросить вас о помощи по следующему коду, который я быстро написал, beucase Я всегда получаю «403 FORBIDDEN».C# HttpWebRequest - PreAuthenticate: все еще возвращает 401 запрещен (HTTPS)

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; 
    } 

ответ

4

Сайт, который вы пытаетесь открыть, требует базовой аутентификации. Итог: вам нужно указать имя пользователя/пароль в 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; 

Here's one article объяснить более подробно, как различные схемы аутентификации обрабатываются в .Net.

+0

Нет, ни с «истинным» и «ложь» это то же самое. Я не уверен, правильно ли это, открывая ссылку в браузере, откроется всплывающее окно с запросом на имя пользователя и пароль. – Snake

+0

Если «аутентификация» выполняется через всплывающее окно, оно изначально выполняется на стороне клиента. Ваш запрос никогда этого не увидит. Похоже, сайт использует некоторую аутентификацию форм. Возможно, вы можете получить прямой URL-адрес на странице входа, но даже тогда использование свойства Credentials, вероятно, не будет работать, вам нужно будет отправить имя пользователя/pwd на страницу с помощью запроса POST. –

+0

О, я вижу, что есть «https». Я изменил URI в программе и теперь получаю 401 ... любые идеи, пожалуйста? – Snake

0

Этот код работает 4 мне ...

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; 

 Смежные вопросы

  • Нет связанных вопросов^_^