2016-07-21 5 views
0

Ich habe fast alles versucht, was ich mir vorstellen kann, um das zu erreichen, einschließlich einiger Dinge, die ich online gefunden habe. Alles, was ich versuche, ist das Herunterladen einer Datei (die einen direkten Link hat) von einer Website, auf der ich mich einloggen muss.WebClient DownloadFile mit Autorisierung funktioniert nicht

Ich habe versucht, die folgenden zu tun, mit dem „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); 

und ich habe auch versucht, als auch die Login-Informationen in dem Header setzen. Ich habe auch versucht, nur die Anmeldeinformationen einstellen, wie Sie aus dem kommentierten Code sehen:

  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); 

Egal, was ich versuche, das einzige, was ich es herunterladen bekommen, ist eine Datei, die die Login endet als Seite, als ob es nicht die Login-Informationen akzeptiert, die ich bestanden habe.

Ich habe die Header und so angesehen, und ich sehe nichts ungewöhnliches, das würde erklären, warum das nicht funktioniert. Irgendwelche Ideen? Vielen Dank.

Antwort

0

Ich könnte schwören, ich hatte dies schon einmal versucht, aber ich denke, vielleicht hatte ich es nur ein bisschen anders oder so. So funktionierte es so:

  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); 

Es war der Keks im Titel, der es funktionierte. Ich dachte, ich hätte das schon einmal gemacht, aber vielleicht habe ich etwas mit einem Keks gemacht, der anders war.

0

Dies scheint ein Problem mit der Authentifizierung/Autorisierung zu sein.

Es könnte viele Gründe dafür geben, wie: 1) kann der Authentifizierungs-/Autorisierungsmechanismus irgendeine Art von Hash verwenden. 2) möglicherweise verwenden Sie die falsche Art von Authentifizierungsmechanismus ("Basic", wie ich sehen kann). 3) Möglicherweise werden Sie authentifiziert, aber nicht autorisiert.

Der beste Weg, um die Ursache zu finden, ist: Verwenden Sie Fiddler. Melden Sie sich über die Benutzeroberflächenseite an und versuchen Sie, die Datei herunterzuladen. Nehmen Sie dabei die Fiddlersitzung auf. Versuchen Sie es mit dem Code, den Sie haben. Erneut Capture der Fiddler-Sitzung. Vergleichen Sie den Geiger, um den Unterschied zu finden.

Hoffe, das hilft.

+0

Leider muss ich eine formelle Anfrage stellen, um Fiddler installieren zu lassen, was ich getan habe, aber das wird ein paar Tage dauern. Ich habe mir die Informationen angesehen, die Chrome auf der Registerkarte "Netzwerk" anzeigt, und sehe nichts, was erklären würde, warum das, was ich versucht habe, nicht funktioniert. –

0

Versuchen Sie, vorübergehend die Zertifikatsvalidierung:

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;

Dies würde bedeuten, jedoch, dass der webclient jedes Zertifikat akzeptieren würde, so this Post für weitere Informationen sehen.

+0

Dies schien in keinem der beiden Szenarien hilfreich zu sein. :( –

+0

Entschuldigung, ich hatte ein ähnliches Problem und das hat es gelöst :( –

Verwandte Themen