Скачать PDF через прокси - PullRequest
       12

Скачать PDF через прокси

2 голосов
/ 12 сентября 2011

У меня есть список 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): Bad Request».Я, очевидно, могу получить доступ к этим PDF-файлам через Firefox, поэтому мне интересно, что я здесь делаю неправильно.Я довольно новичок в программировании в целом, и очень плохо знаком с веб-протоколами через C #.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 12 сентября 2011

используйте fiddler для определения разницы между запросом, который ваш код отправляет, и запросом через браузер.

ошибка 400 вызвана неправильным запросом;в противоположность прокси-серверу, который отказывает вам (407), или сайту, требующему аутентификации (401).

Кстати, строка "wb2.Credentials = ..." предоставляет ваше имя пользователя / пароль целевому серверу.это предназначено?

WebClient давно не использовался, но вы можете использовать var request = HttpWebRequest.Create ();request.Proxy = proxy;request.GetResponse (). GetResponseStream () и считывание байтов с помощью BinaryReader ().

Это даст вам байтовый массив, который вы можете записать в файл с помощью File.WriteAllBytes () вместо необходимости использовать FileStream.

hth

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...