2010-02-08 2 views
1
나는 항상 "금지 (403)"를 얻을 beucase, 내가 빨리 쓰기 한 다음 코드로 도움을 부탁드립니다

.C#을 HttpWebRequest - 선 - : 아직도 반환 (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 다양한 인증 제도는 닷넷에서 처리하는 방법을보다 자세히 설명.

+0

아니 ... 나 4 작동합니다. 브라우저에서 링크를 열면 사용자 이름과 비밀번호를 묻는 팝업 창이 열립니다. – Snake

+0

"인증"이 팝업을 통해 수행되면 처음에는 클라이언트 측에서 시행됩니다. 귀하의 요청은 결코 그것을 보지 못할 것입니다. 사이트에서 일종의 양식 인증을 사용하고있는 것 같습니다. 아마도 로그인 페이지에 대한 직접 URL을 얻을 수 있지만 Credentials 속성을 사용해도 작동하지 않는 경우 POST 요청을 사용하여 username/pwd를 페이지에 보내야합니다. –

+0

아, "https"가 있음을 알 수 있습니다. 나는 프로그램의 URI를 변경했으며 401을 얻습니다. – Snake

0

이 코드는 하나 "false"를 "true"로하고 동일로,

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;