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

ASP.NET Discussion :

Former un HttpWebRequest à partir de plusieurs éléments [Débutant]


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Par défaut Former un HttpWebRequest à partir de plusieurs éléments
    Bonjour,

    je me permets de solliciter votre aide car je tourne en rond sur un bout de code, surement simple à implémenter.

    L'objectif de mon code est d'uploader un fichier sur un serveur distant à l'aide de la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <html>
    	<body>
    	<form method=POST ENCTYPE="multipart/form-data" ACTION="http://myServer/upload" METHOD=POST>
    	<input type="file" name="my_file" />
    	<input type="hidden" name="requestId" value="my_token" />
    	<input type="submit" value="OK" />
    	</form>
    	</body>
    J'arrive bien a générer mon token et je me suis aidé des différents liens qu'on trouve sur le net pour générer une méthode en m'appuyant sur HttpWebRequest.

    J'ai bien trouvé comment faire passer le formulaire dans ma requête mais je ne sais pas comment faire passer le champ hidden ci-dessus ayant pour nom requestId et pour valeur mon token.

    Avez-vous une piste pour réaliser cette requête ?

    Merci d'avance.

  2. #2
    Membre confirmé
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Par défaut
    Voici un bout de code qui fonctionne, mais il me manque toujours mon token...

    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
     
    private void UploadFilesToRemoteUrl(string url, string[] files, string
    logpath)
    {
     
    long length = 0;
    string boundary = "----------------------------" +
    DateTime.Now.Ticks.ToString("x");
     
     
    HttpWebRequest httpWebRequest2 = (HttpWebRequest)WebRequest.Create(url);
    httpWebRequest2.ContentType = "multipart/form-data; boundary=" + boundary;
    httpWebRequest2.Method = "POST";
    httpWebRequest2.KeepAlive = true;
     
    httpWebRequest2.Credentials =
    System.Net.CredentialCache.DefaultCredentials;
     
    Stream memStream = new System.IO.MemoryStream();
     
    byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" +
    boundary + "\r\n");
     
     
    memStream.Write(boundarybytes,0,boundarybytes.Leng th);
    length += boundarybytes.Length;
     
    string headerTemplate = "Content-Disposition: form-data; name=\"{0}\";
    filename=\"{1}\"\r\n Content-Type: application/octet-stream\r\n\r\n";
     
    for(int i=0;i<files.Length;i++)
    {
     
    string header = string.Format(headerTemplate,"file"+i,files[i]);
     
    byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
     
    memStream.Write(headerbytes,0,headerbytes.Length);
    length += headerbytes.Length;
     
    FileStream fileStream = new FileStream(files[i], FileMode.Open,
    FileAccess.Read);
    byte[] buffer = new byte[1024];
     
    int bytesRead = 0;
     
    while ( (bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0 )
    {
    memStream.Write(buffer, 0, bytesRead);
    length += bytesRead;
    }
     
     
    memStream.Write(boundarybytes,0,boundarybytes.Leng th);
    length += boundarybytes.Length;
     
    fileStream.Close();
    }
     
    httpWebRequest2.ContentLength = memStream.Length;
     
    Stream requestStream = httpWebRequest2.GetRequestStream();
     
    memStream.Position = 0;
    byte[] tempBuffer = new byte[memStream.Length];
    memStream.Read(tempBuffer,0,tempBuffer.Length);
    memStream.Close();
    requestStream.Write(tempBuffer,0,tempBuffer.Length );
    requestStream.Close();
     
     
    WebResponse webResponse2 = httpWebRequest2.GetResponse();
     
    Stream stream2 = webResponse2.GetResponseStream();
    StreamReader reader2 = new StreamReader(stream2);
     
     
    MessageBox.Show(reader2.ReadToEnd());
     
    webResponse2.Close();
    httpWebRequest2 = null;
    webResponse2 = null;
     
    }
    J'ai également supprimé les lignes 16 et 17 ci-dessus car je ne peux malheureusement pas utilisé ce mécanisme. Est-il possible d'insérer des informations complémentaires dans le header ?

    Merci d'avance.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Par défaut
    Hello,

    Jsute pour remarque, ton code est un peu confu car tu as tout réalisé dans ta même méthode. En tant qu'ingénieur réseau ,j'imagine que t'es plus à l'aise avec des scripts et autres langages procéduraux.

    Pour que ce soit plus compréhensible, créer toi une classe PostParam correspondant aux paramètres que tu vas postés, que ce soit des variables ou ton fichier.
    Une autre classe se chargera de les additionné et d'en générer la sérialisé en flux multipart tel que tu le souhaite.

    Une solution concrète est dispo sur StackOverFlow : http://stackoverflow.com/questions/2...c-sharp-client

  4. #4
    Membre confirmé
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Par défaut
    Bonjour,

    J'ai finalement réussi à m'en sortir en consultant la RFC1867 :

    http://www.faqs.org/rfcs/rfc1867.html

    Le problème résidait dans mon Boundary qui était mal formé.

    Attention au \r\n

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

Discussions similaires

  1. Sélection de plusieurs éléments
    Par ti-ben dans le forum Langage
    Réponses: 8
    Dernier message: 04/09/2005, 11h54
  2. Crée image à partir de plusieurs Timage
    Par spikto dans le forum Composants VCL
    Réponses: 2
    Dernier message: 09/08/2005, 14h38
  3. [CR] copier-coller plusieurs éléments de l'etat
    Par quaresma dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 18/04/2005, 14h46
  4. [ImageMagick] Générer une image à partir de plusieurs images ?
    Par fichtre! dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 16/02/2005, 15h32
  5. [SUM] récuperer une quantite a partir de plusieurs table
    Par Snowballz dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 14/09/2004, 18h48

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