2017-11-03 9 views
0

아래 주소에서 .xlsx 파일을 다운로드하고 싶습니다. http://members.tsetmc.com/tsev2/excel/MarketWatchPlus.aspx?d=1396-08-08C에서 URL에서 파일을 다운로드하는 방법

자동으로 링크를 클릭하면 브라우저에서 파일을 다운로드합니다. 이 코드에서 파일을 다운로드하려고 시도했습니다.

using (var client = new WebClient()) 
{ 
     client.DownloadFile("http://members.tsetmc.com/tsev2/excel/MarketWatchPlus.aspx?d=1396-08-08", @"D:\Archive\1396-08-08.xlsx"); 
} 

그러나 첫 번째 단계에서는 브라우저에서 다운로드 한 파일과 다른 별난 파일이 다운로드됩니다.

또한 나는 시도 :

System.Diagnostics.Process.Start(
"http://members.tsetmc.com/tsev2/excel/MarketWatchPlus.aspx?d=0"); 

하지만이 코드는 두 가지 단점이 있습니다 : 그것은 필요하지 않는 브라우저를 열고

1-.

2 다운로드 한 파일의 경로 나 파일 이름을 확인할 수 없습니다.

위의 링크 주소를 클릭하여 다운로드 할 파일과 정확히 동일한 파일을 얻고 싶습니다. 필수 파일을 다운로드하려면 어떻게해야합니까?

Currupted file Correct File

+1

"브라우저에서 다운로드 한 파일과 다른 별난 파일"이란 무엇입니까? – David

+0

파일이 비공개로 원하는 파일 인 경우 - 질문을 편집하여 URL을 제거하고 편집자가 계속 볼 수 있기 때문에 운영자에게 도움을 요청하십시오. – ispiro

+0

URL에'members'가 있기 때문에 보호 된 리소스에 액세스하려면 로그인해야한다는 웹 페이지를 다운로드하는 것이 가장 가능성이 높습니다. 이것이 어떻게 수행되는지는 웹 페이지에서 어떤 종류의 보안 조치를 취했는지에 따라 다릅니다. –

답변

1

라세 Vågsæther 칼슨 맞습니다. 응답 헤더가 포함되어 있기 때문에 브라우저가 파일을 압축 해제 똑똑 :

content-encoding:"gzip" 
다운로드하고이 코드를 사용하여 파일을 압축 해제

void Main() 
{ 
    using (var client = new WebClient()) 
    { 
     client.Headers.Add("accept", "*/*"); 
     byte[] filedata = client.DownloadData("http://members.tsetmc.com/tsev2/excel/MarketWatchPlus.aspx?d=1396-08-08"); 

     using (MemoryStream ms = new MemoryStream(filedata)) 
     {  
      using (FileStream decompressedFileStream = File.Create("c:\\deleteme\\test.xlsx")) 
      { 
       using (GZipStream decompressionStream = new GZipStream(ms, CompressionMode.Decompress)) 
       { 
        decompressionStream.CopyTo(decompressedFileStream); 
       } 
      } 
     } 
    } 
} 
(파일 이름, 경로 등에 따라 조정) 할 수

+0

예외 : GZip 헤더의 마법 번호가 올바르지 않습니다. GZip 스트림을 전달하고 있는지 확인하십시오. – Behnam

+0

저에게 도움이됩니다. Excel 파일을 열어 볼 수 있습니다. LINQPad가 있으면 정확한 코드를 사용해 볼 수 있습니다. http://share.linqpad.net/h82x35.linq – Crowcoder

+0

정확한 코드를 복사했지만 여전히 작동하지 않습니다. – Behnam