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 :

Impossible d'effectuer une requete HTTP POST avec HttpWebRequest


Sujet :

C#

  1. #1
    Membre habitué Avatar de Rapha222
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 128
    Points : 168
    Points
    168
    Par défaut Impossible d'effectuer une requete HTTP POST avec HttpWebRequest
    Salut,
    J'essaye d'effectuer une requete Http POST en multipart/form-data pour simuler l'envoi d'un fichier mais la requete ne semble pas s'effectuer en entier (je n'ai que les headers de la requete HTTP) :
    [root@localhost rapha]# python server.py
    IP : ('127.0.0.1', 32851)
    POST / HTTP/1.1
    User-Agent: FilesApi/FilesAPI v0.1 (Unix 2.6.27.7)
    Referer: http://api.files.getwebb.org
    Content-Type: multipart/form-data; boundary=-------------------906641065
    Content-Length: 1845
    Expect: 100-continue
    Connection: keep-alive
    Host: 127.0.0.1
    Alors que normalement, je devrais avoir quelque chose comme ceci :
    [root@localhost rapha]# python server.py
    IP : ('127.0.0.1', 32851)
    POST / HTTP/1.1
    User-Agent: FilesApi/FilesAPI v0.1 (Unix 2.6.27.7)
    Referer: http://api.files.getwebb.org
    Content-Type: multipart/form-data; boundary=-------------------906641065
    Content-Length: 1845
    Expect: 100-continue
    Connection: keep-alive
    Host: 127.0.0.1

    -------------------906641065
    Content-Disposition: form-data; name="fichier1"; filename="icon.png"
    Content-Type: application/octet-stream

    (contenu de l'image)
    ---------------------906641065Content-Disposition: form-data; name="nb_fichiers"

    1
    ---------------------906641065
    Content-Disposition: form-data; name="votes"

    on
    ---------------------906641065--
    Voici 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
    string Boundary = "-------------------" + (new System.Random()).Next(); // Séparateur des éléments du formulaire
     
    string Data = Boundary + "\r\n";
     
    // Création de la requête pour les fichiers
    int FichierNo = 0;
    foreach(string Fichier in this.FilesList) {
    	FichierNo++;
     
    	System.IO.FileInfo FileInfos = new System.IO.FileInfo(Fichier);
     
    	Data += "Content-Disposition: form-data; name=\"fichier" + FichierNo + "\"; filename=\"" + FileInfos.Name + "\"\r\n"; // Nom du fichier
                  Data += "Content-Type: application/octet-stream\r\n\r\n"; // Mimetype 
     
    	Data += (new System.IO.StreamReader(Fichier)).ReadToEnd()+ "\r\n"; // Ajout du contenu du fichier
    	Data += "--" + Boundary; // Fin de l'enregistrement
    }
     
    // Nombre de fichiers
    Data += "Content-Disposition: form-data; name=\"nb_fichiers\"\r\n\r\n";
    Data += FichierNo + "\r\n";
    Data += "--" + Boundary;
     
    // Activer le vote
    if(this.EnableVotes) {
    	Data += "\r\nContent-Disposition: form-data; name=\"votes\"\r\n\r\n";
    	Data += "on\r\n";
    	Data += "--" + Boundary;
    }
     
    // Envoyer par email
    if(this.Email != null) {
                  Data += "\r\nContent-Disposition: form-data; name=\"check_email\"\r\n\r\n";
    	Data += "on\r\n";
    	Data += "--" + Boundary + "\r\n";
     
    	Data += "Content-Disposition: form-data; name=\"email\"\r\n\r\n";
    	Data += this.Email + "\r\n";
    	Data += "--" + Boundary;
    }
     
    // Fin de requete
    Data += "--\r\n";
     
    byte[] DataBytes = (new System.Text.ASCIIEncoding()).GetBytes(Data);
     
    // Envoi de la requete			
    System.Net.HttpWebRequest Request = (System.Net.HttpWebRequest) System.Net.WebRequest.Create("http://127.0.0.1/");
    Request.Method = "POST";
    Request.UserAgent = this.Agent;
    Request.Referer = "http://api.files.getwebb.org";
     
    Request.ContentType = "multipart/form-data; boundary=" + Boundary;
    Request.ContentLength = DataBytes.Length;
     
    // Envoi des données
    System.IO.Stream PostData = Request.GetRequestStream();
    PostData.Write(DataBytes, 0, DataBytes.Length);
    PostData.Close();
    Je ne comprends vraiment pas, parce que meme le code du MSDN ne marche pas : http://msdn.microsoft.com/fr-fr/libr...od(VS.80).aspx

    Il faut faire quelque chose en plus et j'aurais loupé ca ?

    Note : Mon code pour intercepter la requete en Python marche avec un navigateur, donc ca ne peut pas etre ca le problème .
    Merci

  2. #2
    Membre habitué Avatar de Rapha222
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 128
    Points : 168
    Points
    168
    Par défaut
    J'ai trouvé le problème, en fait, il faut envoyer le contenu du fichier avec ReadByte parce que en le lisant en Ascii et en le retransformant en Bytes, il semble y avoir des pertes sur les ficheirs binaires (comme des images)

Discussions similaires

  1. AIR/AS3 : effectuer une requete http et catch la reponse
    Par MedyAndFriends dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 25/11/2011, 18h09
  2. Réponses: 2
    Dernier message: 28/06/2007, 10h11
  3. Comment effectuer une requête http post ?
    Par Turtle_fr dans le forum 4D
    Réponses: 10
    Dernier message: 07/09/2006, 02h25
  4. [ Requete ] effectuer une requete avec la valeur d'un combo box
    Par Jeremie_Vi dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 28/06/2006, 16h36
  5. effectuer une requete insert avec 'values' ET 'select'
    Par delaio dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/08/2004, 20h05

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