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:
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
Code : Tout sélectionner
$_FILECONTENT = FileRead("[b]tonfichier.txt[/b]"])
$FormData = '-----------------------------' & $Boundary & _ ; $Boundary est nombre aléatoire
@CRLF & 'Content-Disposition: form-data; name="file"; filename="[b]tonfichier.txt[/b]"' & _
@CRLF & @CRLF & 'Content-Type: ' & "text/plain" & _
@CRLF & @CRLF & $_FILECONTENT & _
@CRLF & '-----------------------------' & $Boundary & '--' & @CRLF
Et la fonction upload (utilisable comme ceci: _Upload("
tonsite.fr", "
/upload.php",
$FormData))
► Afficher le texte
Code : Tout sélectionner
Func _Upload($SITE, $PAGE, $FormData)
$StartupTCP = TCPStartup()
Global $IP = TCPNameToIP($SITE)
Global $SOCKET = TCPConnect($IP, 80)
If $SOCKET <> -1 Then
TCPSend($SOCKET, "POST " & $PAGE & " HTTP/1.0" & @CRLF & _
"Host: " & $SITE & @CRLF & _
"Content-Type: multipart/form-data; boundary=---------------------------" & $Boundary & @CRLF & _
"Content-Length: " & StringLen($FormData) & @CRLF & _
@CRLF & $FormData)
Else
TCPSend($SOCKET, "GET " & $PAGE & " HTTP/1.0" & @CRLF & _
"HOST: " & $SITE & @CRLF & @CRLF)
EndIf
Global $recv = ""
Do
$recv &= TCPRecv($SOCKET, 1024)
Until @error
Return $recv
TCPShutdown()
EndFunc ;==>_Upload
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
Code : Tout sélectionner
<form method="POST" enctype="multipart/form-data" action="">
<fieldset>
<legend>Upload</legend>
<input type="hidden" name="verify" value="1" />
Identifiant : <input type="text" name="pseudo" maxlength="24" value="" />
Fichier : <input type="file" name="fichier" />
<input type="submit" value="Envoyer" />
</fieldset>
</form>
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
Code : Tout sélectionner
#include <http.au3>
#include <date.au3>
$socket = _HTTPConnect("127.0.0.1")
_HTTPPostFile("127.0.0.1", "/test/post.php", $socket, @DocumentsCommonDir & '\image.png', 'fichier', 'aurel2108')
If FileExists("output.txt") Then FileDelete("output.txt")
FileWrite('output.txt', _HTTPRead($socket))
_HTTPClose($socket)
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=fichier filename=" & $file & @CRLF
$multipost_cmd &= "Content-Type: "&$contenttype&@CRLF&@CRLF
$multipost_cmd &= $fileread&@CRLF
$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
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("output2.txt") Then FileDelete("output2.txt")
$file = FileOpen("output2.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
return 'image/png'
EndFunc
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
.
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. :/