2010-04-10 8 views
3

할당 된 작업 프로젝트에 대한 도움이 필요합니다. 지금 우리는 수동으로 사이트로 이동하여 매월 공급 업체의 웹 사이트에서 2 엑셀 파일을 다운로드 한 다음 로그온합니다. 파일은 SQL로로드됩니다.비밀번호로 보호 된 웹 사이트에서 다운로드 자동화

이 과정을 자동화하고 싶습니다. 이제 파일을 SQL에로드 할 수는 있지만 사용자 정보를 입력하고 파일을 수집하는 웹 사이트로 로깅을 자동화 할 수 있는지 잘 모르겠습니다. 대부분 SQL을 처리하고 .NET 경험이 거의 없으므로 모든 코드 샘플이 가장 만족 스러울 것입니다.

그냥 확인하십시오. 로그온 양식은 aspx 페이지에 있습니다. 사용자 이름 & 암호 필드, 잊어 버린 암호 링크 및 로그온 버튼이 포함 된 테이블이있는 기본 양식

+0

인가 페이지의 양식을 통해 또는 사용자 이름과 암호를 묻는 브라우저 대화 상자를 통해? –

+2

웹 사이트를 암호로 보호하는 방법에는 여러 가지가 있습니다 (HTTP 기본, 로그인 페이지에서 쿠키 설정 ...). 귀하의 웹 사이트는 어떤 메커니즘을 사용합니까? – dtb

답변

4

webclient 또는 httpwebrequest를 사용할 수 있습니다.

Login to the page with HttpWebRequest

How do you login to a webpage and retrieve its content in C#?

의 HttpWebRequest 예 :

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://sso.bhmobile.ba/sso/login"); 
    req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)"; 
    req.Method = "POST"; 
    req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; 
    req.Headers.Add("Accept-Language: en-us,en;q=0.5"); 
    req.Headers.Add("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"); 
    req.KeepAlive = true; 
    req.Headers.Add("Keep-Alive: 300"); 
    req.Referer ="http://sso.bhmobile.ba/sso/login"; 

    req.ContentType = "application/x-www-form-urlencoded"; 

    String Username = "username"; 
    String PassWord = "Password"; 

    StreamWriter sw = new StreamWriter(req.GetRequestStream()); 
    sw.Write("application=portal&url=http%3A%2F%2Fwww.bhmobile.ba%2Fportal%2Fredirect%3Bjsessionid%3D1C568AAA1FB8B5C757CF5F68BE6ECE65%3Ftype%3Dssologin%26url%3D%2Fportal%2Fshow%3Bjsessionid%3D1C568AAA1FB8B5C757CF5F68BE6ECE65%3Fidc%3D1023278&realm=sso&userid=" + Username + "&password=" + password + "&x=16&y=11"); 
    sw.Close(); 

    HttpWebResponse response = (HttpWebResponse)req.GetResponse(); 


    StreamReader reader = new StreamReader(response.GetResponseStream()); 
    string tmp = reader.ReadToEnd(); 

    foreach (Cookie cook in response.Cookies) 
    { 
     tmp += "\n" + cook.Name + ": " + cook.Value; 
    } 


    Response.Write(tmp); 
    Response.End(); 

에서는 WebClient 예 : 그것은 로그인

WebClient wc = new WebClient(); 
wc.Credentials = new NetworkCredential("username", "password"); 
string url = "http://foo.com";     
try 
{ 
     using (Stream stream = wc.OpenRead(new Uri(url))) 
     { 
       using (StreamReader reader = new StreamReader(stream)) 
      { 
       return reader.ReadToEnd(); 
      } 
     } 
} 
catch (WebException e) 
{ 
     //Error handeling 
} 
+1

좋은 답변입니다.이 경우에는 스트림의 압축을 풀어야 할 것처럼 "Accept-Encoding : gzip, deflate"헤더를 삭제합니다. 그리고 실제 요청을 보내는 방법을 알아 내기 위해 Fiddler와 같은 somemething을 사용하십시오. –

+0

고마워요 : - 웹 클라이언트가 필요한 것 같습니다. 이것을 더 조사 할 것입니다 – Andrew

+0

@Mikael Svenson : 좋은 지적입니다! Yip, fiddler는 훌륭하며 항상 webclient 또는 httpwebrequest로 브라우저 요청을 모방하려고 할 때 보낼 헤더, 양식 필드 및 숨겨진 필드를 확인하는 데 사용해야합니다. +1 –

관련 문제