[..] Envoi d'un fichier et de texte via requête POST
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
[..] Envoi d'un fichier et de texte via requête POST
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).
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)
Re: [..] Envoi d'un fichier et de texte via requête POST
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
http://autoitscript.fr/forum/viewtopic.php?f=6&t=8087
Re: [..] Envoi d'un fichier et de texte via requête POST
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. :/
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)
Re: [..] Envoi d'un fichier et de texte via requête POST
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é.
Code : Tout sélectionner
Global $_POST2 = "action=simple&Submit=Envoyer+mes+fichiers"Re: [..] Envoi d'un fichier et de texte via requête POST
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)
Re: [..] Envoi d'un fichier et de texte via requête POST
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:
Il vous suffit de changer dans _HTTPPost_files le "name=myFIeld[]" par le nom de votre "Input type file" de votre formulaire.
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()Re: [..] Envoi d'un fichier et de texte via requête POST
Oulà... Excusez-moi mais là je suis totalement perdu. :/
Pourriez-vous ré-expliquer les manipulations que je dois effectuer ? ^^"
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)
Re: [..] Envoi d'un fichier et de texte via requête POST
Je suis au boulot, je vous ferai un script complet ce soir.
Re: [..] Envoi d'un fichier et de texte via requête POST
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.
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)
Re: [..] Envoi d'un fichier et de texte via requête POST
Salut,
Un code qui pourrait surement vous aider:
Et la fonction upload (utilisable comme ceci: _Upload("tonsite.fr", "/upload.php", $FormData))
Les caractères en gras son à changer.
@+
Un code qui pourrait surement vous aider:
► Afficher le texte
► Afficher le texte
@+
Re: [..] Envoi d'un fichier et de texte via requête POST
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)
Re: [..] Envoi d'un fichier et de texte via requête POST
Je me permet de faire un UP car je n'ai malheureusement pas trouvé de solution. :/
Code du formulaire :
Code du formulaire :
► Afficher le texte
Ne rien dire même quand on sait peut dés fois être la meilleure des solutions. (aurel2108)
Re: [..] Envoi d'un fichier et de texte via requête POST
Salut aurel2108,
pour ton formulaire, cette fonction devrait aller:
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)
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
_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
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 ?
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)
Re: [..] Envoi d'un fichier et de texte via requête POST
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é.
J'ai tout simplement oublié de supprimer cette ligne, désolé.
Re: [..] Envoi d'un fichier et de texte via requête POST
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. :/
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)
Re: [..] Envoi d'un fichier et de texte via requête POST
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
EndFuncRe: [..] Envoi d'un fichier et de texte via requête POST
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)
Re: [..] Envoi d'un fichier et de texte via requête POST
Et bien utilise $_POST au lieu de $_FILES....
Re: [..] Envoi d'un fichier et de texte via requête POST
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)



