Page 1 sur 1

[R] HTML : Upload de fichiers via une requête POST

Posté : ven. 08 août 2008 19:47
par big_ben3333
Salut,

Je cherche à envoyer un fichier à une page web via un script.

Je sais comment faire une requête POST classique via les sockets, mais par contre je ne sais pas comment y ajouter un fichier et surtout pour l'encoder convenablement pour ne pas qu'il ne perturbe la requête.

Si vous avez une lib qui fait ca, je suis prenneur.

Merci à vous tous et principalement à toi Tlem qui t'occupes du forum comme un chef ;).

Re: [..] HTML : Upload de fichiers via une requête POST

Posté : ven. 08 août 2008 22:43
par Tlem
big_ben3333 a écrit :Merci à vous tous et principalement à toi Tlem qui t'occupes du forum comme un chef ;).
Merci.

Je n'ai malheureusement pas la réponse à votre question.
Comme je part demain matin pour 8 jours à l'étranger, je laisse un autre modérateur ou utilisateur faire des recherches et répondre à votre question. ;)

Re: [..] HTML : Upload de fichiers via une requête POST

Posté : ven. 08 août 2008 23:50
par big_ben3333
C'est bon !

J'ai trouvé en sniffant simplement ce qui passait et en faisant un tour sur la RFC 1867.

Voici une fonction un peu bourrin qui ne prend qu'un fichier en compte, mais ca peux bien dépanner :

Code : Tout sélectionner


Func HTTPFILE($site, $page, $fileContent, $mimetype, $varName="fichier", $filename="fichier")
    TCPStartup()
    Local Const $IP = TCPNameToIP($site)
    Local Const $SOCKET = TCPConnect($IP, 80)
   
    If $fileContent <> -1 Then
        ;~ Devrait être généré aléatoirement
        $bundary = '17992491914241'
        $fileContent = '-----------------------------' & $bundary & @CRLF & 'Content-Disposition: form-data; name="' & $varName & '"; filename="' & $filename & '"' & @CRLF & 'Content-Type: ' & $mimetype  & @CRLF & @CRLF & $fileContent & @CRLF & "-----------------------------' & $bundary & '--" & @CRLF
        
        TCPSend($SOCKET, "POST " & $page & " HTTP/1.0" & @CRLF & _
                        "Host: " & $site & @CRLF & _
                        "Content-Type: multipart/form-data; boundary=---------------------------" & $bundary & @CRLF & _
                        "Content-Length: " & StringLen($fileContent) & @CRLF & _
                        @CRLF & _
                        $fileContent)
    Else
        TCPSend($SOCKET, "GET " & $page & " HTTP/1.0" & @CRLF & _
                        "HOST: " & $site & @CRLF & @CRLF)
    EndIf
   
    Local $recv
    Do
        $recv &= TCPRecv($SOCKET, 1024)
    Until @error
    TCPShutdown()
    Return $recv
    
EndFunc

 
Et pi un truc comme ca pour l'appeler (exemple pour un jpg) :

Code : Tout sélectionner



$file = FileOpen($img_file, 0)


If $file <> -1 Then
    $content = FileRead($file)
    MsgBox(64, "", HTTPFILE("www.mon-site.net", "/photos.php?mode=add", $content, "image/jpeg", "fichier", "toto.jpg"))
EndIf
 

Allez, à la prochaine galère AutoItienne !!