나는 액세스하려는 웹 페이지가 양식 인증을 사용한다고 생각합니다. 즉, 보호 된 리소스에 액세스하려면 올바른 인증 쿠키를 제공해야합니다. 그리고 유효한 인증 쿠키를 얻으려면 먼저 쿠키를 내보내는 LogOn 페이지에 POST 요청을 보내 자신을 인증해야합니다. 일단 쿠키를 검색하면 보호 자원에 대한 후속 요청시이를 전송할 수 있습니다. 상자 WebClient
은 쿠키를 지원하지 않습니다. 때문에 ASP.NET의 ViewState에의 crapiness에 분명히
using (var client = new CookieAwareWebClient())
{
var values = new NameValueCollection
{
{ "username", "john" },
{ "password", "secret" },
};
client.UploadValues("http://domain.loc/logon.aspx", values);
// If the previous call succeeded we now have a valid authentication cookie
// so we could download the protected page
string result = client.DownloadString("http://domain.loc/testpage.aspx");
}
:
public class CookieAwareWebClient : WebClient
{
public CookieAwareWebClient()
{
CookieContainer = new CookieContainer();
}
public CookieContainer CookieContainer { get; private set; }
protected override WebRequest GetWebRequest(Uri address)
{
var request = (HttpWebRequest)base.GetWebRequest(address);
request.CookieContainer = CookieContainer;
return request;
}
}
지금 당신이이 개 요청을 해고하기 위해 클라이언트를 사용할 수 있습니다 이러한 이유로 사용자 정의 쿠키 인식 웹 클라이언트를 작성할 수 로그온 요청을 따라 몇 가지 다른 매개 변수를 보내야 할 수도 있습니다. 다음과 같이 할 수 있습니다. 웹 브라우저에서 인증하고 보내야 할 정확한 매개 변수와 헤더를 FireBug에서 확인하십시오.
왜 페이지로 리디렉션하지 않습니까? 서버 프로세스에서 코드를 사용하여 다운로드하면 동일한 자격 증명을 사용하지 않는 것입니다. 브라우저 (클라이언트 자격 증명 포함)가 페이지에 액세스하는 것보다 올바르게 이해하면 다른 시스템 (서버)의 다른 프로세스가이를 다운로드하여 클라이언트에게 표시합니다! – shambulator
웹 페이지에 제공된 자격 증명은 어떻게 제공됩니까? 폼 인증을 사용합니까? –
@shambulator 해당 페이지로 리디렉션한다는 것은 무엇을 의미합니까? 그 페이지의 html 코드를 얻으려고합니다. – mko