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 :

Télécharger un fichier avec HttpWebResponse [Débutant]


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 213
    Points : 102
    Points
    102
    Par défaut Télécharger un fichier avec HttpWebResponse
    Bonjour à toutes et tous,

    J'ai une petite application à modifier et n'étant pas un grand spécialiste je souhaiterai avoir un peu d'aide, vos conseils, vos idées, vos solutions.

    Je suis sous Visual Studio 2015 en C#.

    Mon application se connecte à un site https, envois des informations et des fichiers. Jusqu'à présent j'avais un retour assez simple (xmldocument), mais certains changements font que maintenant je vais devoir gérer un retour d'un fichier .zip

    J'aurai besoin de votre aide pour savoir quel code (fonction, procédure), je vais devoir utiliser pour récupérer ce fichier et l'enregistrer sur mon disque.

    Un petit bout de code pour mon retour actuel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    ...
    XmlDocument doc = new XmlDocument();
    doc.Load(response.GetResponseStream());
    ...

    D'avance merci.

    Bonne continuation.
    D.

  2. #2
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Points : 10 543
    Points
    10 543
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    using (Stream file = File.Create(filename))
    {
        response.GetResponseStream().CopyTo(file);
    }

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 213
    Points : 102
    Points
    102
    Par défaut
    Bonjour Monsieur Dorin,

    Merci pour votre réponse.

    Pour l'instant je ne sais pas encore la tester, car le site distant n'est pas encore en fonction, mais dès que j'arrive à faire des tests, je mettrai ce post comme résolu (si c'est le cas), sinon, je me permettrai de continuer cette discussion.

    Encore merci de votre aide.

    bàv,
    D.

  4. #4
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 213
    Points : 102
    Points
    102
    Par défaut
    Bonjour,

    J'avais une petite demande pour faire suite à cette discussion.

    Quelle est la différence et/ou l'impact de l'utilisation de la solution proposée par rapport à la suivante :

    1er proposition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    using (Stream file = File.Create(filename))
    {
        response.GetResponseStream().CopyTo(file);
    }
    ...
    2e idée :

    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
     
    ...
    Dim Reponse As HttpWebResponse = web.GetResponse()
    Dim xbuffer(4096) as Byte
    Dim fichier As String = "C:\......MonFichier.zip"
    Dim ind As Integer = 0
    Dim xStream As Stream = Response.GetResponseStream();
    Dim xFileStream As New FileStream(fichier, FileMode.Create, FileAccess.Write)
     
    Do
         ind = xstream.Read(xbuffer, 0, 4096)
         xFileStream.Write(xbuffer, 0, ind)
    Loop While ind >0
     
    xFileStream.Close()
    ...
    D'avance merci.


    Cordialement,
    D.

  5. #5
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Points : 10 543
    Points
    10 543
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par tripper.dim Voir le message
    Quelle est la différence et/ou l'impact de l'utilisation de la solution proposée par rapport à la suivante
    En terme de différence, si ce n'est le nombre de lignes, il n'y en a pas (la méthode CopyTo doit être plus ou moins implémentée ainsi).

    En terme d'impact, la première solution requiert un framework .Net 4.0 ou supérieur. La seconde est compatible avec toutes les versions du framework .Net.

  6. #6
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 213
    Points : 102
    Points
    102
    Par défaut
    Monsieur Dorin,

    Merci pour les explications. Je vais donc utiliser la 1er solution (pour le nombre de ligne )

    Belle journée et bonne continuation.


    Bien à vous,
    D.

  7. #7
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Points : 10 543
    Points
    10 543
    Billets dans le blog
    21
    Par défaut
    J'aurais pu rajouter que la maintenance est facilité avec la première méthode. D'une part, car il y a moins de lignes, d'autres part, car on sait tout de suite ce que cela fait (CopyTo est très explicite !).

    Avec la seconde méthode, on est obligé de s'attarder un peu plus (même si dans ce cas, ce n'est pas longtemps) pour déterminer le comportement de la boucle.

  8. #8
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 213
    Points : 102
    Points
    102
    Par défaut
    Bonjour,

    Me revoilà.

    J'ai enfin accès au site distant et j'ai un petit soucis avec les différentes méthodes définies actuellement.
    Le serveur est en https et j'utilise le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ...
     HttpWebRequest request = this.getRequest(new Uri(..........));
     
                Stream file = File.Create(this.repReturn + "fileReturn.zip");
     
                request.GetRequestStream().CopyTo(file);
     
     
    ....
    En testant, j'ai un retour (erreur) au niveau du CopyTo(file) : {"Impossible d'envoyer un corps de contenu avec ce type de verbe."}
    Comment puis-je corriger cet erreur ?

    Est-ce que vous pourriez m'aider à trouver une solution ?

    Normalement, le retour de mon request est un fichier, mais comment puis-je voir si ce n'est pas un autre retour ?

    D'avance merci.


    D.

  9. #9
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Points : 10 543
    Points
    10 543
    Billets dans le blog
    21
    Par défaut
    Le soucis ne viendrait pas de là ?

    Citation Envoyé par tripper.dim Voir le message
    request.GetRequestStream().CopyTo(file);

    [/CODE]
    Ne serait-ce pas plutôt GetResponseStream ?

  10. #10
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 213
    Points : 102
    Points
    102
    Par défaut
    Bonjour Monsieur Dorin,

    Effectivement en relisant mon code (plusieurs fois), j'ai aussi remarqué qu'il y avait des changement à faire. Malheureusement, à chaque modification, j'ai une autre erreur qui apparaît (c'est les joies de la programmation ;-).

    {"La référence d'objet n'est pas définie à une instance d'un objet."}

    Ici dès l'arrivée dans HttpWebResponse response = (HttpWebResponse)request.GetResponse(), je pars en exception mais je ne comprends pas très bien l'erreur.

    J'ai surement oublié quelques chose quelque part, mais je ne vois pas où.

    Je souhaiterai savoir, s'il est possible de "voir" si ma request passe bien, connexion au site et si j'ai bien quelques chose (et quoi) dans mon response.


    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
     
    ...
     
     HttpWebRequest request = this.getRequest(new Uri(......));
     
                try
                {
                    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                    {
     
                        Stream file = File.Create(this.repReturn + "fileReturn.zip");
                        response.GetResponseStream().CopyTo(file);
     
                        ...............
     
                    }
                }
                catch (WebException e)
                {
                    this._error = ((HttpWebResponse)e.Response).StatusCode.ToString();
                    return 0;
                }
    Encore merci de l'intérêt que vous porté à mes questions.

    D.

  11. #11
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Points : 10 543
    Points
    10 543
    Billets dans le blog
    21
    Par défaut
    Attention à ce que vous faite :

    Citation Envoyé par tripper.dim Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    Ici, vous avez un problème de précédence :
    1. vous convertissez la variable request en HttpWebResponse. Comme la variable est de type HttpWebRequest, évidement, cela ne marche pas et renvoie null ;
    2. Du coup, l'accès à la méthode GetResponse sur une variable null génère l'exception que vous avez.


    Ici, deux possibilités :
    • ou bien vous utilisez des parenthèses pour modifier l'ordre d'interprétation des différents éléments : using (HttpWebResponse response = (HttpWebResponse)(request.GetResponse()))
    • ou bien vous utilisez le mot clé as (ma préférence) pour convertir le résultat d'une expression : using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)

  12. #12
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 213
    Points : 102
    Points
    102
    Par défaut
    Bonjour Monsieur Dorin,

    Une grand merci pour votre aide. Cela fonctionne maintenant. Du moins pour la partie téléchargement d'un fichier en HttpWebResponse.

    J'ai d'autres soucis, mais je vais faire d'autres posts.

    Encore merci.

    Belle journée.
    D.

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

Discussions similaires

  1. Télécharger un fichier avec Indy et SSL
    Par [DreaMs] dans le forum Web & réseau
    Réponses: 7
    Dernier message: 15/11/2007, 14h27
  2. Réponses: 1
    Dernier message: 25/10/2007, 13h02
  3. Télécharger plusieurs fichiers avec Wget
    Par Guilhem_mdg dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 21/02/2007, 16h12
  4. [VB6] Télécharger un fichier avec progression
    Par tebonb dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/12/2005, 18h34

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