2009-06-03 2 views
5

HttpWebRequest를 사용하여 사용자 이름과 암호가 필요한 https URI를 가져 오려고합니다. URI를 브라우저에 넣으면 자격 증명을 요청하는 대화 상자가 나타나고 작동합니다. HttpWebRequest를 사용하면 401 Unauthorized 오류가 발생합니다.클라이언트 자격 증명이있는 SSL을 통한 HttpWebRequest

NetworkCredentials의 설명서에 SSL을 지원하지 않지만 사용하려고하는 것을 찾을 수 없다고 나와 있습니다.

답변

5

서버가 HTTP 기본 인증 또는 다른 종류를 사용합니까? HTTP 기본을 사용하는 경우 웹 요청의 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 Framework의 일부 이상한 행동이있다. 당신은 코드가 말한다 무엇을해야한다고 생각 하겠지만 실제로이 수행합니다

  • 서버 당신이 준 자격 증명 401
  • 다시 보내기 요청과 응답없는 자격 증명으로 서버에

    • 보내기 요청을 그것
    • 서버가 요청을 수락합니다.

    왜 이런 일이 일어날 지 몰라, 깨진 것 같아서 아마도 내 컴퓨터의 버크와 어쩌면 그것은 당신에게 일어나지 않을 것입니다.

    앱이 성능에 민감하지 않고 요청이 대용량 데이터 인 POSTS가 아닌 경우에는 알 수 없지만이를 해결하기 위해 수동으로 HTTP 기본 인증 헤더를 작성하고 설정해야합니다 Headers 컬렉션을 조작하여 수동으로 HttpWebRequest

  • +0

    나는 당신이 묘사하는 행동이 * nix에서 보여지는 것과 동일한 행동이라고 믿는다. 그것은 한 번 시도하고 실패한 다음 자격 증명을 보내고 성공합니다. – Stephan

    +0

    이것이 http 사양의 일부인 일종의 요청 요청 시퀀스라고 생각합니다. – MGOwen

    관련 문제