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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
aurel2108
Niveau 4
Niveau 4
Messages : 90
Enregistré le : dim. 17 juil. 2011 21:19
Status : Hors ligne

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

#1

Message 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).
Modifié en dernier par aurel2108 le ven. 29 juil. 2011 19:26, modifié 2 fois.
Ne rien dire même quand on sait peut dés fois être la meilleure des solutions. (aurel2108)
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

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

#2

Message 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
Avatar du membre
aurel2108
Niveau 4
Niveau 4
Messages : 90
Enregistré le : dim. 17 juil. 2011 21:19
Status : Hors ligne

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

#3

Message 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. :/
Ne rien dire même quand on sait peut dés fois être la meilleure des solutions. (aurel2108)
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

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

#4

Message 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é.
Avatar du membre
aurel2108
Niveau 4
Niveau 4
Messages : 90
Enregistré le : dim. 17 juil. 2011 21:19
Status : Hors ligne

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

#5

Message par aurel2108 »

En effet, mais comment adapter votre exemple à un autre formulaire qui lui ne possède pas d'identification ?
Ne rien dire même quand on sait peut dés fois être la meilleure des solutions. (aurel2108)
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

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

#6

Message 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.
Avatar du membre
aurel2108
Niveau 4
Niveau 4
Messages : 90
Enregistré le : dim. 17 juil. 2011 21:19
Status : Hors ligne

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

#7

Message par aurel2108 »

Oulà... Excusez-moi mais là je suis totalement perdu. :/
Pourriez-vous ré-expliquer les manipulations que je dois effectuer ? ^^"
Ne rien dire même quand on sait peut dés fois être la meilleure des solutions. (aurel2108)
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

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

#8

Message par timmalos »

Je suis au boulot, je vous ferai un script complet ce soir.
Avatar du membre
aurel2108
Niveau 4
Niveau 4
Messages : 90
Enregistré le : dim. 17 juil. 2011 21:19
Status : Hors ligne

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

#9

Message 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. ;)
Ne rien dire même quand on sait peut dés fois être la meilleure des solutions. (aurel2108)
Geek0o
Niveau 2
Niveau 2
Messages : 20
Enregistré le : mar. 26 oct. 2010 21:28
Status : Hors ligne

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

#10

Message 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.

@+
Avatar du membre
aurel2108
Niveau 4
Niveau 4
Messages : 90
Enregistré le : dim. 17 juil. 2011 21:19
Status : Hors ligne

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

#11

Message par aurel2108 »

Merci beaucoup mais j'en reviens toujours au problème de : Où mettre la valeur que doit renvoyer un champ de texte ?
Ne rien dire même quand on sait peut dés fois être la meilleure des solutions. (aurel2108)
Avatar du membre
aurel2108
Niveau 4
Niveau 4
Messages : 90
Enregistré le : dim. 17 juil. 2011 21:19
Status : Hors ligne

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

#12

Message par aurel2108 »

Je me permet de faire un UP car je n'ai malheureusement pas trouvé de solution. :/

Code du formulaire :
► Afficher le texte
Ne rien dire même quand on sait peut dés fois être la meilleure des solutions. (aurel2108)
servabat
Niveau 4
Niveau 4
Messages : 69
Enregistré le : sam. 02 avr. 2011 16:26
Status : Hors ligne

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

#13

Message 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)
Avatar du membre
aurel2108
Niveau 4
Niveau 4
Messages : 90
Enregistré le : dim. 17 juil. 2011 21:19
Status : Hors ligne

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

#14

Message 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 ?
Ne rien dire même quand on sait peut dés fois être la meilleure des solutions. (aurel2108)
servabat
Niveau 4
Niveau 4
Messages : 69
Enregistré le : sam. 02 avr. 2011 16:26
Status : Hors ligne

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

#15

Message 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é.
Avatar du membre
aurel2108
Niveau 4
Niveau 4
Messages : 90
Enregistré le : dim. 17 juil. 2011 21:19
Status : Hors ligne

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

#16

Message 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
Modifié en dernier par aurel2108 le ven. 29 juil. 2011 19:09, modifié 1 fois.
Ne rien dire même quand on sait peut dés fois être la meilleure des solutions. (aurel2108)
servabat
Niveau 4
Niveau 4
Messages : 69
Enregistré le : sam. 02 avr. 2011 16:26
Status : Hors ligne

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

#17

Message 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
Avatar du membre
aurel2108
Niveau 4
Niveau 4
Messages : 90
Enregistré le : dim. 17 juil. 2011 21:19
Status : Hors ligne

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

#18

Message 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. :/
Ne rien dire même quand on sait peut dés fois être la meilleure des solutions. (aurel2108)
servabat
Niveau 4
Niveau 4
Messages : 69
Enregistré le : sam. 02 avr. 2011 16:26
Status : Hors ligne

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

#19

Message par servabat »

Et bien utilise $_POST au lieu de $_FILES....
Avatar du membre
aurel2108
Niveau 4
Niveau 4
Messages : 90
Enregistré le : dim. 17 juil. 2011 21:19
Status : Hors ligne

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

#20

Message 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. :/
Ne rien dire même quand on sait peut dés fois être la meilleure des solutions. (aurel2108)
Répondre