2011-09-12 6 views
2

데이터베이스 웹 사이트의 PDF에 직접 링크되는 URL 목록이 있습니다. 프록시 서버를 통해 웹 사이트에 액세스해야한다는 사실을 제외하면 다운로드 프로세스를 자동화하는 것이 매우 쉽습니다. 내가 사용하려고했습니다 코드는이있다 : 어떤 이유프록시를 통해 PDF 파일 다운로드

public void Download() 
{ 
    WebClient wb2 = new WebClient(); 
    WebProxy proxy = new WebProxy("PROXY_URL:port", true); 
    proxy.Credentials = new NetworkCredential("USERNAME", "PASSWORD"); 
    GlobalProxySelection.Select = proxy; 

    try 
    { 
    for(int i = 0; i < URLList.Length; i++) 
    { 
     byte[] Data = DownloadData(URLList[i]); 

     FileStream fs = new FileStream(@"D:\Files\" + i.toString() + ".pdf", FileMode.Create) 
     fs.Write(Data, 0, Data.Length); 
     fs.Close(); 
    } 
    } 
    catch(WebException WebEx) 
    { 
    MessageBox.Show(WebEx.Message); 
    } 
} 

public byte[] DownloadData(string path) 
{ 
    WebClient wb2 = new WebClient(); 
    wb2.Credentials = new NetworkCredential("USERNAME","PASSWORD"); 
    return wb2.DownloadData(path); 
} 

, 그것은 오류 "(400) : 잘못된 요청"을 반환 할 때마다. 필자는 분명히 파이어 폭스를 통해이 PDF를 얻을 수 있기 때문에 여기서 잘못하고있는 것이 궁금합니다. 나는 프로그래밍에 익숙하지 않으며 C#을 통해 웹 프로토콜에 익숙하지 않다. 어떤 도움을 주시면 감사하겠습니다.

+0

URLList를 다시 확인 했습니까? 내 말은 그것 또는 아마도 특수 문자 간섭에 오타가있는 경우 ... – loxxy

+0

특수 문자가 없으며 URL이 Firefox 또는 IE에 붙여 넣을 때 잘 작동합니다. – Agni451

답변

0

은 코드가 보내는 요청과 브라우저를 통한 요청의 차이점을 해결하기 위해 피들러를 사용합니다.

400 오류는 잘못된 요청으로 인한 것입니다. 당신을 부정하는 프록시 (407) 또는 인증을 요구하는 사이트 (401)에 반대합니다.

"wb2.Credentials = ..."줄은 대상 서버에 사용자 이름/암호를 제공하고 있습니다. 이게 의도 된거야?

잠시 WebClient를 사용하지 않았지만 var request = HttpWebRequest.Create();를 사용할 수 있습니다. request.Proxy = proxy; request.GetResponse(). GetResponseStream()을 호출하고 BinaryReader()를 사용하여 바이트를 읽습니다.

FileStream을 사용하지 않고 File.WriteAllBytes()를 사용하여 파일에 쓸 수있는 바이트 배열을 제공합니다.

hth

관련 문제