2010-04-14 5 views
0

보안 웹 사이트에서 csv 파일을 쿼리하도록 내 응용 프로그램을 원합니다. 웹 프로그래밍에 대한 경험이 없으므로 자세한 지침을 이해할 수 있습니다. 현재 사이트에 대한 사용자 로그인이 있으며 수동으로 CSV를 쿼리하고 내 응용 프로그램에 로컬로 파일을로드하게합니다. 사용자가 로그인 정보를 입력하고 웹 사이트에서 인증하고 데이터를 쿼리하도록함으로써이 작업을 자동화하고 싶습니다. 이 응용 프로그램은 C# .NET으로 작성되었습니다.비밀번호로 보호 된 https 웹 사이트에서 데이터를 쿼리하는 방법

나는 다음 코드를 이미 테스트했으며 사용자가 이미 자신을 인증하고 수동 쿼리를 작성하면 파일에 액세스 할 수 있습니다.

 System.Net.WebClient Client = new WebClient(); 
     Stream strm = Client.OpenRead("https://<URL>/file.csv"); 

여기는 인증을 위해 사이트로 전송 된 요청입니다. 실제 사용자 ID와 암호를 괄호로 묶었습니다.

POST /pwdVal.asp HTTP/1.1 
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */* 
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; Tablet PC 2.0; OfficeLiveConnector.1.4; OfficeLivePatch.1.3; .NET4.0C; .NET4.0E) 
Content-Type: application/x-www-form-urlencoded 
Accept-Encoding: gzip, deflate 
Cookie: ASPSESSIONID<unsure if this data contained password info so removed>; ClientId=<username> 
Host: www3.emidas.com 
Content-Length: 36 
Connection: Keep-Alive 
Cache-Control: no-cache 
Accept-Language: en-US 

client_id=<username>&password=<password> 
+0

사용자 로그인 방법에 대한 자세한 정보를 제공해주십시오. 기본 인증 또는 DIGEST 인증을 사용하고 있습니까? 이것은 일종의 쿠키/로그인 세션 로그인입니까? – Broam

+0

@Broam 정보를 기꺼이 제출 하겠지만 인증 프로토콜에 익숙하지 않습니다. 어떤 유형의 인증이 사용되는지 확인하는 방법을 알려 주시면 아래에 게시 할 것입니다. – Addie

답변

1

로그인이 수행되면 서버가 쿠키를 보냅니다. 로그인 양식과 동일한 값을 제출해야합니다. (이것은 UploadValues ​​()를 사용하여 수행 할 수 있습니다) 그러나 결과 쿠키를 CookieContainer에 저장해야합니다.

내가 이것을했을 때 HttpWebRequest를 사용하여 만들었지 만 http://couldbedone.blogspot.com/2007/08/webclient-handling-cookies.html마다 WebClient를 서브 클래스로 만들고 GetWebRequest() 메서드를 재정 의하여 쿠키를 지원할 수 있습니다.

아, 또한 Fiddler을 수동으로 사용하는 동안 웹 사이트에 실제로 어떤 정보가 전달되는지 확인하는 것이 유용하다는 것을 알았습니다. 그래서 내가 재현하려는 정보를 알고있었습니다.

편집, 정교 요구 : 나는 HttpWebRequest를 사용하여이를 수행하는 방법 만 설명 할 수있다. WebClient를 사용하지 않았다. 아래는 내가 로그인에 사용한 코드 단편입니다.

private CookieContainer _jar = new CookieContainer(); 
    private string _password; 
    private string _userid; 
    private string _url; 
    private string _userAgent; 

...

 string responseData; 

     HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(_url); 

     webRequest.CookieContainer = _jar; 
     webRequest.Method = "POST"; 
     webRequest.ContentType = "application/x-www-form-urlencoded"; 
     webRequest.UserAgent = _userAgent; 

     string requestBody = String.Format(
      "client_id={0}&password={1}", _userid, _password); 

     try 
     { 
      using (StreamWriter requestWriter = new StreamWriter(webRequest.GetRequestStream())) 
      { 

       requestWriter.Write(requestBody); 
       requestWriter.Close(); 

       using (HttpWebResponse res = (HttpWebResponse)webRequest.GetResponse()) 
       { 
        using (StreamReader responseReader = new StreamReader(res.GetResponseStream())) 
        { 

         responseData = responseReader.ReadToEnd(); 
         responseReader.Close(); 

         if (res.StatusCode != HttpStatusCode.OK) 
          throw new WebException("Logon failed", null, WebExceptionStatus.Success, res); 
        } 

       } 
      } 
+0

이 작업을 수행하는 방법에 대해 자세히 설명 할 수 있습니까? 필자는 사용자 이름과 암호를 보내고 위에 게시 한 POST를 추출하기 위해 피 들러를 사용했습니다. – Addie

0

이 토끼 구멍 아래로 이동하기 전에 웹 사이트에 연락하여 그들이에서 사용자 계정 정보를 조회 할 수있는 웹 서비스를 제공하는 경우 요청합니다. 제안하는 시뮬레이트 된 로그인 방법은 최후의 수단이어야합니다.

+0

할 것입니다. 고마워요 .MrGumbe. 답장을 받으면 다시 한 번 말씀 드리겠습니다. – Addie

0

당신이 그것을 할 수있는 또 다른 방법은 자동화 IE, 예를 들면이다 WebBrowser 컨트롤을 사용하십시오. 그러면 IE가 Javascript를 실행하는 것과 같은 영리한 것들을 더 정확하게 시뮬레이션 할 수 있습니다. 자바 스크립트 또는 기타 영리한 것들이 필요하지 않은 경우 다음 IE를 사용하여 조금 무거운 손으로 그리고 아마도 다른 문제가 발생하기 쉽습니다.

관련 문제