首页 文章

从网站下载.pdf文件 . 文件已损坏

提问于
浏览
1

我想下载以下pdf文件(该文件在点击后几秒内生成):

PDF Link

我尝试了以下代码来执行此操作:

static void DownloadByWebClient()
{
    string url = "http://www.sigmaaldrich.com/MSDS/MSDS/DisplayMSDSPage.do?country=NL&language=EN-generic&productNumber=271004&brand=SIAL&PageToGoToURL=null";
    string clientfile = @"C:\Users\Test\Downloads\newfile.pdf";

    WebClient wc = new WebClient();
    wc.UseDefaultCredentials = true;
    wc.Credentials = CredentialCache.DefaultCredentials;

    wc.DownloadFileAsync(new Uri(url, UriKind.Absolute), clientfile);
}

pdf文件已创建 . 但是,当我尝试打开它时,我收到一条消息,说它已损坏 . 也许问题是文件首先生成才能下载?

我也尝试了 DownloadFile 方法 . 但是然后抛出一个错误:

A first chance exception of type 'System.Net.WebException' occurred in System.dll
System.Net.WebException: An exception occurred during a WebClient request.
System.Configuration.ConfigurationErrorsException: 
Error creating the Web Proxy specified in the  'system.net/defaultProxy' configuration section.
---> System.Net.Sockets.SocketException: An invalid argument was supplied
at System.Net.SafeCloseSocketAndEvent.CreateWSASocketWithEvent(AddressFamily addressFamily,
SocketType socketType, ProtocolType protocolType, Boolean autoReset, Boolean signaled)
at System.Net.NetworkAddressChangePolled..ctor()
at System.Net.AutoWebProxyScriptEngine.AutoDetector.Initialize()
at System.Net.AutoWebProxyScriptEngine.AutoDetector.get_CurrentAutoDetector()
at System.Net.AutoWebProxyScriptEngine..ctor(WebProxy proxy, Boolean useRegistry)
at System.Net.WebProxy.UnsafeUpdateFromRegistry()
at System.Net.WebProxy..ctor(Boolean enableAutoproxy)
at System.Net.Configuration.DefaultProxySectionInternal..ctor(DefaultProxySection section)
at System.Net.Configuration.DefaultProxySectionInternal.GetSection()
--- End of inner exception stack trace ---

at System.Net.Configuration.DefaultProxySectionInternal.GetSection()
at System.Net.WebRequest.get_InternalDefaultWebProxy()
at System.Net.HttpWebRequest..ctor(Uri uri, ServicePoint servicePoint)
at System.Net.HttpRequestCreator.Create(Uri Uri)
at System.Net.WebRequest.Create(Uri requestUri, Boolean useUriBase)
at System.Net.WebRequest.Create(Uri requestUri)
at System.Net.WebClient.GetWebRequest(Uri address)
at System.Net.WebClient.DownloadFile(Uri address, String fileName)
--- End of inner exception stack trace ---
at System.Net.WebClient.DownloadFile(Uri address, String fileName)
--- End of inner exception stack trace ---

可能是什么原因?

提前致谢!

1 回答

  • 0

    我根据OP的评论和测试改变了我的答案 . 我可以运行以下代码,它工作得很好 . 文件已下载,本地磁盘上的pdf正常 .

    public void DLTest()
    {
        string url = "https://www.osha.gov/Publications/Abate/abate.pdf";
        string clientfile = @"C:\Test\newfile3.pdf";
    
        WebClient wc = new WebClient();
    
        wc.DownloadFile(new Uri(url, UriKind.Absolute), clientfile);
    }
    

    但是,当我使用您的网址“http://www.sigmaaldrich.com/MSDS/MSDS/DisplayMSDSPage.do?country=NL&language=EN-generic&productNumber=271004&brand=SIAL&PageToGoToURL=null”时,pdf不包含数据 . 您使用的网址似乎不支持以PDF格式下载此信息 .

    您可以尝试从其他站点下载MSDS,例如下面的代码使用不同的URL .

    public void DLTest()
    {
        string url = "http://www.sciencelab.com/msds.php?msdsId=9927335";
        string clientfile = @"C:\Test\newfile.pdf";
    
        WebClient wc = new WebClient();
    
        wc.DownloadFile(new Uri(url, UriKind.Absolute), clientfile);
    }
    

相关问题