Загрузить файл через HTTPS, используя .NET (dotnet) - PullRequest
1 голос
/ 26 января 2010

Я хотел бы загрузить файл с использованием VB.NET (предпочтительно) или C # через HTTPS.

У меня есть этот код для загрузки файла по обычному HTTP:

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

Это работает.

Как изменить этот код для загрузки файла, хранящегося на HTTPS-сервере? Я полагаю, это связано с добавлением учетных данных или чем-то подобным.

Ответы [ 3 ]

2 голосов
/ 26 января 2010

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

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

Вы говорите о том, как войти на сайт, защищенный входом в HTML-форму. Я написал этот код некоторое время назад, и вы можете адаптировать его для входа на удаленный сайт: Код входа в Orkut

Вещи, которые вы должны иметь в виду:

  • Если это сайт ASP.NET, сначала нужно вызвать его, чтобы получить значения __EVENTTARGET и __EVENTARGUMENT, так как они необходимы для обработки обратной передачи при входе в систему. Если это не так, пропустите этот шаг.
  • Вам необходимо указать имена, которые использует сайт для заполнения вашего имени пользователя и пароля.
  • Вы должны добавить CookieContainer. Он сохраняет ваш cookie-файл для входа, поэтому последующие вызовы используют этот аутентифицированный контекст.
  • После всего этого вы сможете получить удаленный ресурс и загрузить его
1 голос
/ 26 января 2010

Вам необходимо добавить сертификат валидатора:

// 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;
    }

В 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
0 голосов
/ 26 июля 2013

Попробуйте что-то вроде этого

        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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...