Page 1 sur 1

[..] Envoi d'un fichier et de texte via requête POST

Posté : jeu. 28 juil. 2011 09:13
par aurel2108
Bonjour à tous,

Je tiens tout d'abord à m'excuser pour ouvrir un tel sujet mais j'ai eu beau rechercher pendant des heures je n'ai sois pas trouvé ce qui me convenait, soit pas du tout compris.
Je voudrais donc créer un petit bout de code qui envoie un fichier par une requête post mais qui envoie aussi une autre variable texte en même temps que le fichier.

J'ai trouvé une fonction HTTPFILE mais elle ne fait pas ce que j'attends. :/
Voilà, si quelqu'un pouvais m'aider un petit peu, ce serait vraiment sympa.

Merci d'avance de votre/vos réponse(s).

Re: [..] Envoi d'un fichier et de texte via requête POST

Posté : jeu. 28 juil. 2011 10:03
par timmalos
Qu'est ce qui ne vous convient pas/ que vous ne comprenez pas dans cet exemple?
http://autoitscript.fr/forum/viewtopic.php?f=6&t=8087

Re: [..] Envoi d'un fichier et de texte via requête POST

Posté : jeu. 28 juil. 2011 10:06
par aurel2108
Cet exemple est fait pour envoyer un fichier sur votre hébergeur.
Je comprends bien la partie pour envoyer un fichier, en revanche, je ne vois pas comment ajouter la valeur du champ de texte qui devrait être renvoyée avec mon formulaire. :/

Re: [..] Envoi d'un fichier et de texte via requête POST

Posté : jeu. 28 juil. 2011 10:08
par timmalos
Tout simplement dans la variable $_POST2:

Code : Tout sélectionner

Global $_POST2 = "action=simple&Submit=Envoyer+mes+fichiers"
Remplacez action=simple par votre variable=valeur, et la valeur du Submit par la votre, et le tour est joué.

Re: [..] Envoi d'un fichier et de texte via requête POST

Posté : jeu. 28 juil. 2011 10:22
par aurel2108
En effet, mais comment adapter votre exemple à un autre formulaire qui lui ne possède pas d'identification ?

Re: [..] Envoi d'un fichier et de texte via requête POST

Posté : jeu. 28 juil. 2011 10:36
par timmalos
En effet, je me rends compte que mon exemple n'est pas aussi simple qu'il se voulait. Je regarderai quand j'aurai le temps.


en gros, en gardant les variables de l'exemple,l'ordre c'est ca:

Code : Tout sélectionner

_HTTPConnect($serveur[0])
    _HTTPPost_files($serveur[0], $serveur[2], -1, StringSplit($data, "&", 2), $filenames, "")
    $response = _HTTPRead(-1, 0)
    _HTTPClose()
Il vous suffit de changer dans _HTTPPost_files le "name=myFIeld[]" par le nom de votre "Input type file" de votre formulaire.

Re: [..] Envoi d'un fichier et de texte via requête POST

Posté : jeu. 28 juil. 2011 10:44
par aurel2108
Oulà... Excusez-moi mais là je suis totalement perdu. :/
Pourriez-vous ré-expliquer les manipulations que je dois effectuer ? ^^"

Re: [..] Envoi d'un fichier et de texte via requête POST

Posté : jeu. 28 juil. 2011 11:14
par timmalos
Je suis au boulot, je vous ferai un script complet ce soir.

Re: [..] Envoi d'un fichier et de texte via requête POST

Posté : jeu. 28 juil. 2011 11:19
par aurel2108
Merci beaucoup et surtout ne vous embêtez pas trop pour moi. :)
Peut-être que quelqu'un d'autre pourra m'aider à résoudre ce problème.

Bonne journée à vous. ;)

Re: [..] Envoi d'un fichier et de texte via requête POST

Posté : jeu. 28 juil. 2011 12:25
par Geek0o
Salut,

Un code qui pourrait surement vous aider:
► Afficher le texte
Et la fonction upload (utilisable comme ceci: _Upload("tonsite.fr", "/upload.php", $FormData))
► Afficher le texte
Les caractères en gras son à changer.

@+

Re: [..] Envoi d'un fichier et de texte via requête POST

Posté : jeu. 28 juil. 2011 12:28
par aurel2108
Merci beaucoup mais j'en reviens toujours au problème de : Où mettre la valeur que doit renvoyer un champ de texte ?

Re: [..] Envoi d'un fichier et de texte via requête POST

Posté : ven. 29 juil. 2011 17:06
par aurel2108
Je me permet de faire un UP car je n'ai malheureusement pas trouvé de solution. :/

Code du formulaire :
► Afficher le texte

Re: [..] Envoi d'un fichier et de texte via requête POST

Posté : ven. 29 juil. 2011 18:11
par servabat
Salut aurel2108,

pour ton formulaire, cette fonction devrait aller:

Code : Tout sélectionner

Func _HTTPPostFile($host, $page, $socket = -1, $filepath = "", $champ = "file", $pseudo = "")
   Dim $command

  If $socket == -1 Then
       If $_HTTPLastSocket == -1 Then
           SetError(1)
           Return
       EndIf
       $socket = $_HTTPLastSocket
   EndIf

   $filearr = StringSplit($filepath, "\")
   $file = $filearr[Ubound($filearr) - 1]

   $contenttype = _HTTPPost_contenttype($file)

Dim $boundary = "-----------------------------" + _TimeToTicks(@HOUR, @MIN, @SEC)

   $fileread = _HTTPEncodeString(StringTrimLeft(FileRead(FileOpen($filepath, 16)),2))
   FileClose($fileread)

    $extradata = _HTTPEncodeString($extradata)
   $multipost_cmd = "--"&$boundary&@CRLF
   $multipost_cmd &= 'Content-Disposition:  form-data; name=verify; value=1'
   $multipost_cmd &= "--"&$boundary&@CRLF
   $multipost_cmd &= 'Content-Disposition:  form-data; name=pseudo; value='&$pseudo
   $multipost_cmd &= "--"&$boundary&@CRLF
   $multipost_cmd &= "Content-Disposition: form-data; name="""& $champ & """ filename=""" & $file & """" &@CRLF
   $multipost_cmd &= "Content-Type: "&$contenttype&@CRLF&@CRLF
   $multipost_cmd &= $fileread&@CRLF
   $multipost_cmd &= "--"&$boundary&"--"

   Dim $datasize = StringLen($multipost_cmd)

   $command = "POST "&$page&" HTTP/1.1"&@CRLF
   $command &= "Host: " &$host&@CRLF
   $command &= "User-Agent: "&$_HTTPUserAgent&@CRLF
   $command &= "Connection: close"&@CRLF
   $command &= "Content-Type: multipart/form-data; boundary="&$boundary&@CRLF
   $command &= "Content-Length: "&$datasize&@CRLF
   $command &= ""&@CRLF
   $command &= $extradata&@CRLF
   $command &= $multipost_cmd

   If FileExists("output.txt") Then FileDelete("output.txt")
   $file = FileOpen("output.txt", 1)
   FileWrite($file, $command)
   FileClose($file)

  Dim $bytessent = TCPSend($socket, $command)

   If $bytessent == 0 Then
       SetExtended(@error)
       SetError(2)
       return 0
   EndIf

   SetError(0)
   Return $bytessent
EndFunc

Func _HTTPPost_contenttype($file = "")
    $fileextension = StringRight($file,4)
    Switch $fileextension
        Case ".txt"
            $contenttype = "text/plain"
    Case ".jpg"
            $contenttype = "image/jpg"
    Case ".png"
            $contenttpye = "image/png"
        Case Else
            $contenttype = "application/octet-stream"
        EndSwitch
    Return $contenttype
EndFunc
 
La fonction s'utilise comme ceci:
_HTTPPostFile(Host (www.XXX.com (ou fr, etc.), Page (\XX\XX.php / html , etc.), Socket (ouvert par HttpConnect), Chemin du fichier à envoyer, Nom du champ (ici "Fichier" il me semble), Ton pseudo)

Re: [..] Envoi d'un fichier et de texte via requête POST

Posté : ven. 29 juil. 2011 18:25
par aurel2108
Il y a un problème sur la ligne : $extradata = _HTTPEncodeString($extradata)

Tu n'as pas déclaré $extradata avant... :/
A quoi correspond cette variable ?

Re: [..] Envoi d'un fichier et de texte via requête POST

Posté : ven. 29 juil. 2011 18:28
par servabat
Tu peut la supprimer, c'est un résidu de la fonction que j’utilisai, mais elle est inutile pour ton formulaire POST.

J'ai tout simplement oublié de supprimer cette ligne, désolé.

Re: [..] Envoi d'un fichier et de texte via requête POST

Posté : ven. 29 juil. 2011 18:53
par aurel2108
Mon serveur reçoit le contenu de 'fichier' dans 'verify' et ne reçoit pas 'fichier' et 'pseudo' 0o
Bug ?

EDIT : Bon j'ai trouvé mais j'ai un autre problème. Seule la variable fichier et son contenu sont envoyés, les deux autres sont ignorés. :/
EDIT 2 : Bon maintenant, la variable 'verify' est aussi envoyée mais vide. :/
► Afficher le texte

Re: [..] Envoi d'un fichier et de texte via requête POST

Posté : ven. 29 juil. 2011 19:09
par servabat
Autant pour moi, essaye ceci:

Code : Tout sélectionner

Func _HTTPPostFile($host, $page, $socket = -1, $filepath = "", $champ = "file", $pseudo = "")
   Dim $command

  If $socket == -1 Then
       If $_HTTPLastSocket == -1 Then
           SetError(1)
           Return
       EndIf
       $socket = $_HTTPLastSocket
   EndIf

   $filearr = StringSplit($filepath, "\")
   $file = $filearr[Ubound($filearr) - 1]

   $contenttype = _HTTPPost_contenttype($file)

Dim $boundary = "-----------------------------" + _TimeToTicks(@HOUR, @MIN, @SEC)

   $fileread = _HTTPEncodeString(StringTrimLeft(FileRead(FileOpen($filepath, 16)),2))
   FileClose($fileread)

   $multipost_cmd = "--"&$boundary&@CRLF
   $multipost_cmd &= 'Content-Disposition:  form-data; name="verify"&@CRLF&@CRLF
   $multipost_cmd &= '1'
   $multipost_cmd &= "--"&$boundary&@CRLF
   $multipost_cmd &= 'Content-Disposition:  form-data; name="pseudo"'&@CRLF&@CRLF
   $multipost_cmd &= $pseudo
   $multipost_cmd &= "--"&$boundary&@CRLF
   $multipost_cmd &= 'Content-Disposition: form-data; name="'& $champ & '"; filename="' & $file & '"' &@CRLF
   $multipost_cmd &= "Content-Type: "&$contenttype&@CRLF&@CRLF
   $multipost_cmd &= $fileread&@CRLF
   $multipost_cmd &= "--"&$boundary&"--"

   Dim $datasize = StringLen($multipost_cmd)

   $command = "POST "&$page&" HTTP/1.1"&@CRLF
   $command &= "Host: " &$host&@CRLF
   $command &= "User-Agent: "&$_HTTPUserAgent&@CRLF
   $command &= "Connection: close"&@CRLF
   $command &= "Content-Type: multipart/form-data; boundary="&$boundary&@CRLF
   $command &= "Content-Length: "&$datasize&@CRLF
   $command &= ""&@CRLF
   $command &= $extradata&@CRLF
   $command &= $multipost_cmd

   If FileExists("output.txt") Then FileDelete("output.txt")
   $file = FileOpen("output.txt", 1)
   FileWrite($file, $command)
   FileClose($file)

  Dim $bytessent = TCPSend($socket, $command)

   If $bytessent == 0 Then
       SetExtended(@error)
       SetError(2)
       return 0
   EndIf

   SetError(0)
   Return $bytessent
EndFunc

Func _HTTPPost_contenttype($file = "")
    $fileextension = StringRight($file,4)
    Switch $fileextension
        Case ".txt"
            $contenttype = "text/plain"
    Case ".jpg"
            $contenttype = "image/jpg"
    Case ".png"
            $contenttpye = "image/png"
        Case Else
            $contenttype = "application/octet-stream"
        EndSwitch
    Return $contenttype
EndFunc

Re: [..] Envoi d'un fichier et de texte via requête POST

Posté : ven. 29 juil. 2011 19:26
par aurel2108
Une toute petite correction mais ça marche :D.

En fait, ça marche pas tout à fait. Je le reçois bien en tant que variable post ($_POST) mais il n’apparaît pas dans $_FILES comme avec un envoi normal par navigateur. :/

Re: [..] Envoi d'un fichier et de texte via requête POST

Posté : ven. 29 juil. 2011 20:14
par servabat
Et bien utilise $_POST au lieu de $_FILES....

Re: [..] Envoi d'un fichier et de texte via requête POST

Posté : ven. 29 juil. 2011 20:51
par aurel2108
Je vais voir ce que je peux faire mais si quelqu'un sais comment modifier le script de telle sorte à ce que $_FILES reçoive le fichier, merci d'avance à lui. :/