2016-07-21 11 views
0

나는 온라인에서 찾은 여러 가지 사항을 포함하여이 작업을 수행하기 위해 내가 생각할 수있는 모든 것을 시도했습니다. 제가해야 할 일은 로그인해야하는 웹 사이트에서 파일 (직접 링크가 있음)을 다운로드하는 것입니다. WebClient DownloadFile (승인이 작동하지 않음)

는 내가 "UploadValues"로, 다음을 수행하려고 :

  WebClient myWebClient = new WebClient(); 
      NameValueCollection myNameValueCollection = new NameValueCollection(); 
      myNameValueCollection.Add("username", this.UserName); 
      myNameValueCollection.Add("password", this.Password); 
      byte[] responseArray = myWebClient.UploadValues(felony, myNameValueCollection); 
      myWebClient.DownloadFile(felony, localfelony); 

나는 또한뿐만 아니라 헤더의 로그인 정보를 넣어 시도했습니다. 나는 또한 당신이 주석 코드에서 볼 수 있듯이 단지, 자격 증명을 설정하려고했습니다 : 아무리 내가 무엇을하려고

  WebClient client = new WebClient(); 
      //client.UseDefaultCredentials = false; 
      //client.Credentials = new NetworkCredential(this.UserName, this.Password); 
      client.Headers.Add(HttpRequestHeader.Authorization, "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(this.UserName + ":" + this.Password))); 
      client.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"); 
      //client.Headers.Add(HttpRequestHeader.Cookie, this.webBrowser.Document.Cookie); 
      client.DownloadFile(felony, localfelony); 

, 나는 그것을 다운로드 얻을 수있는 유일한 방법은 로그인되고 끝나는 파일입니다 페이지를 마치 내가 통과 한 로그인 정보를 수락하지 않은 것처럼

나는 머리글 등을 살펴 봤는데, 왜 이것이 작동하지 않는지를 설명하는 평범한 것을 보지 못했습니다. 어떤 아이디어? 감사.

답변

0

나는 이것을 전에 시도 했었다고 맹세 할 수는 있었지만, 아마도 조금 다른 것으로 생각했을 것이다. 그래서 다음과 같이 작동했습니다 :

  WebClient client = new WebClient(); 
      client.UseDefaultCredentials = false; 
      client.Credentials = new NetworkCredential(this.UserName, this.Password); 
      client.Headers.Add(HttpRequestHeader.Cookie, "_gat=1; b46467afcb0b4bf5a47b2c6b22e3d284=mt84peq7u4r0bst72ejs5lb7p6; https://docs.stlucieclerk.com/=1,1; _ga=GA1.2.12049534.1467911267"); 
      client.DownloadFile(webaddress, localname); 

그것은 작동하게 만든 헤더의 쿠키였습니다. 나는 전에 그걸 해냈다 고 생각했지만 어쩌면 내가 다른 쿠키와 관련된 일을했을 수도 있습니다.

0

인증/승인 문제 인 것 같습니다.

이렇게하는 원인은 여러 가지가 있습니다. 1) 인증/권한 부여 메커니즘에서 일종의 해시를 사용할 수 있습니다. 2) 잘못된 인증 메커니즘 (내가 볼 수있는 "기본")을 사용하고있을 수 있습니다. 3) 인증을 받았지만 승인되지 않았을 수 있습니다.

근본 원인을 찾는 가장 좋은 방법은 다음과 같습니다. Fiddler를 사용하십시오. UI 페이지를 사용하여 로그인하고 파일을 다운로드 해보십시오. 그 동안 피들러 세션을 캡처합니다. 거기에 당신이 가지고있는 코드로 무엇이든하려고합니다. 다시 피들러 세션을 캡처하십시오. 차이를 찾기 위해 피 들러를 비교하십시오.

희망이 도움이됩니다.

+0

불행히도 Fiddler를 설치하려면 공식 요청을해야합니다.하지만 그 작업은 며칠이 걸릴 것입니다. Chrome에서 '네트워크'탭에 표시되는 정보를보고 있었는데 왜 내가 시도한 것이 작동하지 않는지 설명 할 수있는 내용이 없습니다. –

0

일시적으로 인증서 유효성 검사를 변경해보십시오 :

System.Net.Security.RemoteCertificateValidationCallback r = System.Net.ServicePointManager.ServerCertificateValidationCallback; System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate(object s, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors) { return true; }; //Do downloading here... System.Net.ServicePointManager.ServerCertificateValidationCallback = r;

이 의미하지만, 웹 클라이언트가 어떤 인증서를 수락, 그래서 더 많은 정보를 원하시면 this 게시물을 볼 것이다.

+0

두 시나리오 중 하나에서 도움이되지 않는 것으로 보입니다. : ( –

+0

죄송합니다. 비슷한 문제가 있었는데 해결되었습니다. –