IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Vérifier l'existence d'une page web


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Amateur vb.net
    Inscrit en
    Avril 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Amateur vb.net
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 99
    Points : 60
    Points
    60
    Par défaut Vérifier l'existence d'une page web
    Bonjour à tous, je développe actuellement une petite application pour m'exercer.
    Cette application consiste à télécharger un fichier dont on spécifie l'url.
    Voici le code complet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
     
    namespace downloader
    {
     
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                textBox_path.Enabled = false;
                button_path.Enabled = false;
            }
     
            private void Form1_Load(object sender, EventArgs e)
            {
     
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                string lien_clipboard = Clipboard.GetText();
                textBox_lien.Text = lien_clipboard;
            }
     
            private void label1_Click(object sender, EventArgs e)
            {
     
            }
     
            private void button2_Click(object sender, EventArgs e)
            {
                if (textBox_lien.Text.Length != 0 && textBox_path.Text.Length != 0)
                {
                    MessageBox.Show(CheckUrl(textBox_path.Text));
                }
                else if (textBox_lien.Text.Length == 0 || textBox_path.Text.Length == 0)
                {
                    MessageBox.Show("Un champ est vide !");
                }
                else
                {
                    MessageBox.Show("Une erreur est survenue.");
                }
            }
     
            private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
            {
                string path;
                path = saveFileDialog1.FileName;
            }
     
            private void button1_Click_1(object sender, EventArgs e)
            {
                saveFileDialog1.ShowDialog();
            }
     
            private void textBox_lien_TextChanged(object sender, EventArgs e)
            {
                if (textBox_lien.Text.Length != 0)
                {
                    textBox_path.Enabled = true;
                    button_path.Enabled = true;
                }
                else
                {
                    textBox_path.Enabled = false;
                    button_path.Enabled = false;
                }
            }
     
            static string CheckUrl(string myUrl)
            {
                HttpWebRequest _Request;
                HttpWebResponse _Response;
                string message = "";
     
                if (myUrl != "")
                {
                    try
                    {
                        _Request = (HttpWebRequest)WebRequest.Create(myUrl);
                        //on spécifie que l'on ne veut pas suivre les redirection
                        _Request.AllowAutoRedirect = false;
                        //on récupère la réponse et on initilaise le message avec le status code retournée
                        //pour la page requeté.
                        _Response = (HttpWebResponse)_Request.GetResponse();
                        message = _Response.StatusCode.ToString();
     
                    }
                    // une exception est levée si un problème survient lors de l'accès à la ressource web
                    catch (System.Net.WebException ex)
                    {
                        if (ex.Response != null)
                        {
                            // on récupère le message d'erreur retourner par le serveur distant
                            message = (((HttpWebResponse)ex.Response).StatusCode).ToString();
                        }
                        else
                            //sinon si le serveur est injoignable on affiche un message d'erreur  
                            message = ex.Message;
                    }
                    //une exception est également levée si le format de l'url passée à 
                    //la méthode Create n'est pas correcte
                    catch (System.UriFormatException ex1)
                    {
                        message = ex1.Message;
                    }
                }//if
                return message;
            }
     
        }
    }
    Je n'ai pas encore géré la sélection de fichier.
    Or ce message est renvoyé quand j'exécute cette méthode (quand je clique sur le button2):
    URI non valide: Impossible de déterminer le format de l'URI.
    Quelqu'un aurait une idée. (Je suis un débutant, soyez indulgent )
    Merci d'avance.

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    essaye avec new uri(myurl)
    sinon tu peux vérifier si le string commence par http://, si ce n'est pas le cas le rajouter devant

    sinon moi j'aurais plutot retourné un booléen pour dire si l'url est bonne, auquel cas il te suffit de retourner true si statuscode = 200 (statuscode peut valoir le célèbre 404 ou d'autres codes http)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre du Club
    Homme Profil pro
    Amateur vb.net
    Inscrit en
    Avril 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Amateur vb.net
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 99
    Points : 60
    Points
    60
    Par défaut
    Merci beaucoup pour ta réponse, mais j'ai finalement décidé de ne pas vérifier l'adresse mais de gérer les exceptions de la méthode downloadfile.
    Voici donc mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
     
    namespace downloader
    {
     
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                textBox_path.Enabled = false;
                button_path.Enabled = false;
            }
     
            private void Form1_Load(object sender, EventArgs e)
            {
     
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                string lien_clipboard = Clipboard.GetText();
                textBox_lien.Text = lien_clipboard;
            }
     
            private void label1_Click(object sender, EventArgs e)
            {
     
            }
     
            private void button2_Click(object sender, EventArgs e)
            {
                if (textBox_lien.Text.Length != 0 && textBox_path.Text.Length != 0)
                {
                    download(textBox_lien.Text, textBox_path.Text);
                }
                else if (textBox_lien.Text.Length == 0 || textBox_path.Text.Length == 0)
                {
                    MessageBox.Show("Un champ est vide !");
                }
                else
                {
                    MessageBox.Show("Une erreur est survenue.");
                }
            }
     
            private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
            {
                string path;
                path = saveFileDialog1.FileName;
                textBox_path.Text = path;
            }
     
            private void button1_Click_1(object sender, EventArgs e)
            {
                saveFileDialog1.ShowDialog();
            }
     
            private void textBox_lien_TextChanged(object sender, EventArgs e)
            {
                if (textBox_lien.Text.Length != 0)
                {
                    textBox_path.Enabled = true;
                    button_path.Enabled = true;
                }
                else
                {
                    textBox_path.Enabled = false;
                    button_path.Enabled = false;
                }
            }
            static void download(string url, string path)
            {
                try
                {
                    WebClient myWebClient = new WebClient();
                    myWebClient.DownloadFile(url, path);
                }
                catch
                {
                    MessageBox.Show("erreur");
                }
            }
     
     
     
        }
    }
    Mais là, un problème se pose. Le path est égal à ce que l'utilisateur sélectionne comme fichier. Mais le problème, c'est que l'utilisateur ne sélectionne pas un dossier mais indique le nom du fichier et dans quel répertoire il sera téléchargé. Et du coup, il faut qu'il précise l'extension du fichier.
    Y aurait-il un moyen de récupérer le nom et l'extension du fichier dans son lien ?

  4. #4
    Membre du Club Avatar de Parmifer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2014
    Messages : 39
    Points : 51
    Points
    51
    Par défaut
    Salut !

    Essaye ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string url = "http://blabla/.../vousavezperdu.txt"; //donné par l'utilisateur, je l'entre en "dur" pour l'exemple
    string nomAvecExtension = url.Substring(url.LastIndexOf('//'));
    Parmifèr

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(cafe <= 0)
    {
        developper = false;
    }

  5. #5
    Membre du Club
    Homme Profil pro
    Amateur vb.net
    Inscrit en
    Avril 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Amateur vb.net
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 99
    Points : 60
    Points
    60
    Par défaut
    Tout fonctionne à merveille, merci beaucoup .
    J'ai rajouté pas mal de fonctionnalité, voici le code complet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    using System;
    using System.ComponentModel;
    using System.Net;
    using System.Threading;
    using System.Windows.Forms;
     
    namespace downloader
    {
     
        public partial class Form1 : Form
        {
            double octets_recus;
            double octets_total;
            double pourcentage;
            WebClient myWebClient = new WebClient();
     
            public Form1()
            {
                InitializeComponent();
                textBox_path.Enabled = false;
                button_path.Enabled = false;
                button_annuler.Enabled = false;
            }
            private void button1_Click(object sender, EventArgs e)
            {
                string lien_clipboard = Clipboard.GetText();
                textBox_lien.Text = lien_clipboard;
            }
            private void button2_Click(object sender, EventArgs e)
            {
                if (textBox_lien.Text.Length != 0 && textBox_path.Text.Length != 0)
                {
                    download_launch(textBox_lien.Text, textBox_path.Text);
                }
                else if (textBox_lien.Text.Length == 0 || textBox_path.Text.Length == 0)
                {
                    MessageBox.Show("Un champ est vide !");
                }
                else
                {
                    MessageBox.Show("Une erreur est survenue.");
                }
            }
     
            private void button1_Click_1(object sender, EventArgs e)
            {
                string path;
                folderBrowserDialog1.ShowDialog();
                path = folderBrowserDialog1.SelectedPath;
                string url = textBox_lien.Text;
                if (Uri.IsWellFormedUriString(url, UriKind.Absolute))
                {
                    string nomAvecExtension = url.Substring(url.LastIndexOf('/'));
                    path = path + nomAvecExtension;
                    string path_new = path.Replace("/", "\\");
                    Console.WriteLine("path =" + path + " url=" + url + " nomAvecExtension=" + nomAvecExtension);
                    textBox_path.Text = path_new;
                }
                else MessageBox.Show("Mauvaise URL !");
     
            }
     
            private void textBox_lien_TextChanged(object sender, EventArgs e)
            {
                if (textBox_lien.Text.Length != 0)
                {
                    textBox_path.Enabled = true;
                    button_path.Enabled = true;
                }
                else
                {
                    textBox_path.Enabled = false;
                    button_path.Enabled = false;
                }
            }
            public void download_launch(string url, string path)
            {
                try
                {
                    if (System.IO.File.Exists(path))
                    {
                        var result = MessageBox.Show("Le fichier que vous avez sélectionné existe déjà, il sera supprimer. Voulez-vous continuer ?", "ok",
                                    MessageBoxButtons.YesNo,
                                    MessageBoxIcon.Question);
                        if (result == DialogResult.Yes)
                        {
                            download(url, path);
                        }
                    }
                    else download(url, path);
                }
                catch
                {
                    MessageBox.Show("L'adresse que vous avez entré est introuvable ou innaccessible.");
                }
            }
            public void download(string url, string path)
            {
                myWebClient.DownloadFileAsync(new Uri(url), path);
                button_download.Enabled = false;
                button_download.Text = "En cours...";
                button_annuler.Enabled = true;
                textBox_path.Enabled = false;
                textBox_lien.Enabled = false;
                button_coller.Enabled = false;
                button_path.Enabled = false;
                myWebClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(myWebClient_DownloadProgressChanged);
                myWebClient.DownloadFileCompleted += new AsyncCompletedEventHandler(myWebClient_DownloadFileCompleted); 
            }
            private void myWebClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
            {
                progressBar1.Value = e.ProgressPercentage;
                octets_recus = e.BytesReceived;
                octets_total = e.TotalBytesToReceive;
                octets_recus = octets_recus * 0.000000954;
                octets_total = octets_total * 0.000000954;
                pourcentage = e.ProgressPercentage;
                double octets_recus_arrondi = Math.Round(octets_recus, 1);
                double octets_total_arrondi = Math.Round(octets_total, 1);
                label1.Text = "Données téléchargées: " + octets_recus_arrondi + " sur " + octets_total_arrondi + "MO  |  " + pourcentage + "%";
            }
            private void myWebClient_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
            {
                    button_annuler.Enabled = false;
                    button_download.Enabled = true;
                    button_path.Enabled = true;
                    button_coller.Enabled = true;
                    textBox_path.Enabled = true;
                    textBox_lien.Enabled = true;
                    textBox_lien.Clear();
                    textBox_path.Clear();
                    progressBar1.Value = 0;
                    label1.Text = "";
                    button_download.Text = "Télécharger !";
                    if (!e.Cancelled)
                    {
                        MessageBox.Show("Téléchargement terminé !");
                    }
                    else MessageBox.Show("Téléchargement annulé !");
     
     
            }
     
            public void button_annuler_Click(object sender, EventArgs e)
            {
                var result = MessageBox.Show("Voulez-vous vraiment annuler le téléchargement ?", "",
                                    MessageBoxButtons.YesNo,
                                    MessageBoxIcon.Question);
                if (result == DialogResult.Yes)
                {
                    var result2 = MessageBox.Show("Voulez-vous supprimer le fichier partiellement téléchargé ?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (result2 == DialogResult.Yes) {
                        myWebClient.CancelAsync();
                        Thread.Sleep(2000);
                        System.IO.File.Delete(textBox_path.Text);
                    }
                    else myWebClient.CancelAsync();
                }
     
     
            }
     
            private void Form1_Load(object sender, EventArgs e)
            {
     
            }
     
     
     
     
        }
    }
    A bientôt.

  6. #6
    Membre du Club Avatar de Parmifer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2014
    Messages : 39
    Points : 51
    Points
    51
    Par défaut
    De rien, content d'avoir pu t'aider !
    Parmifèr

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(cafe <= 0)
    {
        developper = false;
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/08/2011, 14h23
  2. Vérifier l'existence d'une page web
    Par Olivier Regnier dans le forum Web
    Réponses: 0
    Dernier message: 03/08/2011, 21h36
  3. Comment savoir si un fichier existe sur une page web ?
    Par arketip dans le forum Réseau/Web
    Réponses: 7
    Dernier message: 08/04/2008, 02h13
  4. [URL][WEB]Comment vérifier la présence d'une page web ?
    Par Mordoum dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 21/03/2008, 17h02
  5. Tester l'existence d'une page Web
    Par P'tite Lili dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 25/05/2007, 17h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo