2010-06-20 8 views
0

C# (ASP.NET)을 사용하여 원격 파일을 다운로드하려고합니다. 문제는 파일 다운로드 URL을 탐색 할 때입니다. 완벽하게 다운로드됩니다. 내가 WebClient.DownloadData (url)을 시도 할 때 "표시 할 데이터가 없음"응답을 얻습니다..NET을 사용하여 원격 파일 다운로드

내장 된 VS2010 브라우저를 사용하여 탐색하는 경우에도 여전히이 "오류"메시지가 표시됩니다.

파일 링크는 다음과 같습니다 http://www.tase.co.il/TASE/Pages/Export.aspx?sn=he-IL_ds&enumTblType=AllSecurities&Columns=he-IL_Columns&Titles=he-IL_Titles&TblId=0&ExportType=3 (CSV 파일)

가 어떻게 파일을 다운로드 할 수 있습니다? 어떤 아이디어?

많은 감사

+0

내 브라우저 (FF)에서 해당 링크를 클릭하면 "표시 할 데이터가 없습니다"라는 메시지가 표시되므로 Nick에 따르면 세션을 기반으로 할 수 있습니다. – svick

답변

0

당신의 측에 다운로드 문제가되지는 해당 페이지 그래서 당신은 기본적으로 세션을 얻을 사이트에 로그인 할 필요가 ... 아마 세션에서 뭔가를 참조하고 경로가 정상적으로 생성되도록 파일을 가져 오는 과정에서 일반적으로 수행 할 단계를 거쳐야합니다.

추측을해야한다면, 파일 시스템에 대한 요청을 할 때 파일 시스템으로 내보낼 것이라고 생각하고 있습니다. 임시 파일이므로 어딘가에 가져올 수 없습니다. 그것을 만든 단계를 통해 (이 Export.aspx 페이지는 보이지 않습니다.) 거기에 없으며 이에 대한 오류 메시지는 "표시 할 데이터가 없습니다"입니다.

어떤 종류의 봇/리칭이 발생하지 않도록 명시 적으로 차단할 가능성이 있습니다 ... 기본적으로 당신이하려는 일을 근본적으로 방지합니다.

+0

하지만 이상한 일입니다. 어떤 종류의 인증없이 해당 페이지를 탐색하려고하면 파일을 다운로드하게됩니다. 거기에 세션이 없다고 생각하십니까? 막 막히는 일이 있습니까? – Roman

+0

@Roman - 리퍼러에 의해 막히는 것을 막기 위해 내가 추측 할 수있는 것, 매우 일반적인 핫 링크 대책입니다. –

+0

그렇다면 직접 다운로드를 차단하지 않을까요? 링크를 직접 탐색하면 리퍼러가 없어서 나를 차단할 수 있습니다. 그렇지 않니? – Roman

0

많은 사이트가 Referer 또는 User-Agent 헤더를 기반으로 다운로드를 차단합니다.

  1. 는 시계 피들러
  2. 와 "작업" Fiddler
  3. 로 다운로드 시계 코드의 다운로드는
  4. 업데이트 요청 는 "작업"경우에 맞게 이 요청을 비교.
0

원격 파일을 스트림으로 가져 와서 문제를 해결했습니다. 그 시점에서 나는 응답에 스트림을 읽고 쓸 수있었습니다.

//The absolute path to your file 
string remoteFile = "http://my.cloudfront.net/videos/vehicle_english_v3.mp4"; 

//The name of the file you want the user to see when they download the file 
int pos = remoteFile.LastIndexOf("/") + 1; 
string fileName = remoteFile.Substring(pos, remoteFile.Length - pos); 

//Obtain your file as a stream 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(remoteFile); 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
Stream fileStream = response.GetResponseStream(); 

//Write the stream to the response 
if (fileStream != null && fileStream.CanRead) { 
    context.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); 
    context.Response.ContentType = "application/octet-stream"; 
    context.Response.ClearContent(); 
    fileStream.CopyTo(context.Response.OutputStream); 
} 
관련 문제