c# - 通过代理下载 PDF

标签 c# proxy download data-stream

我有一个直接链接到数据库网站上 PDF 的 URL 列表。自动化下载过程非常容易,除了我必须通过代理服务器访问网站这一事实。我一直在尝试使用的代码是这样的:

 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):错误请求”。我显然能够通过 Firefox 很好地访问这些 PDF,所以我想知道我在这里做错了什么。一般来说,我对编程还很陌生,对通过 C# 的 Web 协议(protocol)也很陌生。任何帮助将不胜感激。

最佳答案

使用 fiddler 找出您的代码发送的请求与通过您的浏览器发送的请求之间的区别。

400 错误是由于格式错误的请求;反对代理拒绝您 (407) 或网站要求身份验证 (401)。

顺便说一句,“wb2.Credentials = ...”行向目标服务器提供您的用户名/密码。这是故意的吗?

有一段时间没用过WebClient了,不过可以用var request = HttpWebRequest.Create(); request.Proxy = 代理; request.GetResponse().GetResponseStream() 并使用 BinaryReader() 读取字节。

这将为您提供字节数组,您可以使用 File.WriteAllBytes() 将其写入文件,而不必使用 FileStream。

第一个

关于c# - 通过代理下载 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7382707/

相关文章:

python - 如何在Python命令行URL下载器中添加进度条?

c# - 如何检测 Excel 是否通过自动化启动(VSTO Addin 上下文)

c# - 获取ServiceStack实例的基本URL

java - Hibernate 代理序列化并在客户端接收

javascript - 如何在代理下的node js中发送HTTP请求

C:如何从文件中读取一个jpg并保存?

PHP只下载ID号最小的文件

c# - Linq "Sequence operators not supported for type"异常

c# - 修改传递给C dll的char数组c#

proxy - yum repo 的 url 中带有 cntlm 代理和基本身份验证参数的空服务器响应