2016-07-21 2 views
0

Я пробовал все, что я могу придумать, чтобы заставить это работать, в том числе несколько вещей, которые я нашел в Интернете. Все, что я пытаюсь сделать, это загрузить файл (который имеет прямую ссылку) с веб-сайта, на который я должен войти.WebClient DownloadFile с авторизацией не работает

я попытался сделать следующее, с «UploadValues»:

  WebClient myWebClient = new WebClient(); 
      NameValueCollection myNameValueCollection = new NameValueCollection(); 
      myNameValueCollection.Add("username", this.UserName); 
      myNameValueCollection.Add("password", this.Password); 
      byte[] responseArray = myWebClient.UploadValues(felony, myNameValueCollection); 
      myWebClient.DownloadFile(felony, localfelony); 

, и я также пытался ставить информацию для входа в заголовках, а также. Я также попытался просто настройки учетных данных, как вы можете видеть из комментировал кода:

  WebClient client = new WebClient(); 
      //client.UseDefaultCredentials = false; 
      //client.Credentials = new NetworkCredential(this.UserName, this.Password); 
      client.Headers.Add(HttpRequestHeader.Authorization, "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(this.UserName + ":" + this.Password))); 
      client.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"); 
      //client.Headers.Add(HttpRequestHeader.Cookie, this.webBrowser.Document.Cookie); 
      client.DownloadFile(felony, localfelony); 

Независимо от того, что я стараюсь, единственное, что я могу получить его, чтобы загрузить файл, который заканчивается время Войти страницы, как будто он не принял данные для входа, которые я передал.

Я посмотрел на заголовки и т. Д., И я не вижу ничего необычного, объясняющего, почему это не работает. Есть идеи? Благодарю.

ответ

0

Я могу поклясться, что раньше я это пробовал, но, наверное, может быть, у меня это было немного иначе или что-то в этом роде. Так он работал следующим образом:

  WebClient client = new WebClient(); 
      client.UseDefaultCredentials = false; 
      client.Credentials = new NetworkCredential(this.UserName, this.Password); 
      client.Headers.Add(HttpRequestHeader.Cookie, "_gat=1; b46467afcb0b4bf5a47b2c6b22e3d284=mt84peq7u4r0bst72ejs5lb7p6; https://docs.stlucieclerk.com/=1,1; _ga=GA1.2.12049534.1467911267"); 
      client.DownloadFile(webaddress, localname); 

Это был файл cookie в заголовке, который заставлял его работать. Я думал, что сделал это раньше, но, возможно, я сделал что-то, связанное с файлом cookie, который был другим.

0

Это похоже на проблему аутентификации/авторизации.

Может быть много причин, вызывающих это: 1) может быть механизм аутентификации/авторизации использует какой-то хэш. 2) Возможно, вы используете неправильный механизм аутентификации («Basic», как я вижу). 3) Возможно, вы получаете аутентификацию, но не авторизованы.

Лучший способ найти причину: Использовать Fiddler. Войдите в систему с использованием страницы пользовательского интерфейса и попробуйте загрузить файл. Выполняя этот захват сеанса скрипача. Там пытаются сделать то же самое с любым кодом, который у вас есть. Снова захватите сессию скрипача. Сравните скрипач, чтобы найти разницу.

Надеюсь, это поможет.

+0

К сожалению, я должен подать официальный запрос на установку Fiddler, который я сделал, но это займет пару дней. Я просматриваю информацию, которую Chrome показывает на своей вкладке «Сеть», и не вижу ничего, что могло бы объяснить, почему то, что я пробовал, не работает. –

0

Попробуйте временно изменив проверку сертификата:

System.Net.Security.RemoteCertificateValidationCallback r = System.Net.ServicePointManager.ServerCertificateValidationCallback; System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate(object s, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors) { return true; }; //Do downloading here... System.Net.ServicePointManager.ServerCertificateValidationCallback = r;

Это означает, однако, что WebClient будет принимать какие-либо сертификат, так что видеть this должность для получения дополнительной информации.

+0

Это не помогло ни в одном сценарии. :( –

+0

Извините, у меня была аналогичная проблема, и это решило это :( –