2010-01-26 5 views
0

Je voudrais télécharger un fichier en utilisant VB.NET (de préférence) ou C# via HTTPS.Télécharger le fichier sur HTTPS en utilisant .NET (dotnet)

Je possède ce code pour télécharger un fichier sur HTTP simple:

Dim client As WebClient = New WebClient() 
Dim wp As WebProxy = New WebProxy("[IP number of our proxy server]", [port number of our proxy server]) 
wp.Credentials = CredentialCache.DefaultCredentials 
client.Proxy = wp 
client.DownloadFile("http://sstatic.net/so/img/logo.png", "c:\logo.png") 

Cela fonctionne. Comment changer ce code pour télécharger un fichier stocké sur un serveur HTTPS?

Comment changer ce code pour télécharger un fichier stocké sur un serveur HTTPS? Je suppose que cela a quelque chose à voir avec l'ajout d'informations d'identification ou quelque chose.

+0

Remplacez simplement 'http' par' https' dans la fonction DownloadFile. –

+0

Non, j'ai l'erreur suivante: "Le serveur distant a renvoyé une erreur: (403) Interdit." Je devrais être en mesure de donner le nom d'utilisateur et le mot de passe. – George

+0

Salut ... juste atterri ici de google, n'a pas réellement lu la question, mais repéré immédiatement un problème probable dans votre code: "c: \ logo.png", \ l est une séquence d'échappement (invalide?) Sauf si elle a un @ avant ou c'est "c: \\ logo.png" –

Répondre

2

Il vous suffit de pointer cette adresse à votre ressource HTTPS et d'informer votre titre:

client.Credentials = new NetworkCredential("username", "password"); 
client.DownloadFile("https://your.resource.here", @"localfile.jog") 

Vous parlez comment se connecter à un site protégé par un HTML formulaire de connexion. Je l'ai écrit il y a quelque temps de code et vous pouvez l'adapter à vous connecter à votre site distant: Orkut Login Code

Choses que vous devez garder à l'esprit:

  • Si c'est un site ASP.NET, vous devez appeler Il faut d'abord obtenir les valeurs __EVENTTARGET et __EVENTARGUMENT, car elles sont nécessaires pour traiter votre publication de connexion. Si ce n'est pas le cas, passez cette étape.
  • Vous devez identifier les noms que ce site utilise pour remplir votre nom d'utilisateur et votre mot de passe
  • Vous devez ajouter un CookieContainer. Il conserve votre cookie de connexion, de sorte que les appels suivants utilisent ce contexte authentifié.
  • Après tout cela, vous devriez être en mesure d'obtenir votre ressource à distance et pour le télécharger
+0

Non, j'obtiens l'erreur suivante: "Le serveur distant a renvoyé une erreur: (403) Interdit." Je devrais être en mesure de donner le nom d'utilisateur et le mot de passe. – George

+0

ah ok, comment vous connectez-vous sur ce site? Est-ce une boîte de dialogue Windows, ou avez-vous un formulaire HTML à remplir? –

+0

Il y a un formulaire HTML à remplir. – George

1

Vous devez ajouter un certificat validateur:

// You need to call it only once in a static constructor or multiple times there is no problem 
ServicePointManager.ServerCertificateValidationCallback = ValidateCertificate; 

    private static bool ValidateCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) 
    { 
     return true; 
    } 

En VB:

ServicePointManager.ServerCertificateValidationCallback = AddressOf ValidateCertificate 
Dim client As WebClient = New WebClient() 
'... 
'Your code 

    Private Shared Function ValidateCertificate(sender As Object, certificate As X509Certificate, chain As X509Chain, sslPolicyErrors As SslPolicyErrors) As Boolean 
     return True 
    End Function 
+1

IIRC vous devriez seulement faire ceci si le certificat SSL n'est pas 100% bon –

+0

Mais où est le code pour soumettre notre nom d'utilisateur et mot de passe? – George

+0

@ Marc: Bien sûr, je pensais que le problème était que pour iar :) – MarcosMeli

0

Essayez quelque chose comme ceci

 WebClient wc = new WebClient(); 
     wc.UseDefaultCredentials = false; 

     CredentialCache creds = new CredentialCache(); 
     creds.Add(new Uri(url), "Basic",new NetworkCredential(username, password, domain)); 

     wc.Credentials = creds; 
     wc.Headers.Add(HttpRequestHeader.UserAgent,"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;"); 
     //wc.Headers["Accept"] = "/"; 

     wc.DownloadFile(url,localpath); 
Questions connexes