Page 1 sur 1

[..] Http Post File

Posté : jeu. 21 juil. 2011 12:08
par servabat
Bonjour,

j'ai fait une fonction pour envoyer un fichier en HTTP Post, mais après quelques teste, j'ai l'impression qu'elle ne marche pas. En effet, je n'obtient pas de réponse du serveur (avec HTTPRead) La voici:

Code : Tout sélectionner

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

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

    $contenttype = _HTTPPost_contenttype($file)

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

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

    $extradata = _HTTPEncodeString($extradata)
    
    $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) + StringLen($extradata)

    $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
 
Je précise que j'ai un peut copié d'autres fonctions :) (mais je n'ai plus le lien des sujets :/ )

Voyez vous une erreur quelque part ?

Merci d'avance,
@++

Re: [..] Http Post File

Posté : jeu. 21 juil. 2011 13:40
par timmalos
Installez un sniffeur de réseau comme IEInspector ou plus compliqué WireShark et regardez la différence entre votre requete POST et une autre normale, vous trouverez ou se situe l'erreur facilement.

Je ne peux pas plus vous aider car je ne suis pas chez moi actuellement.

Re: [..] Http Post File

Posté : lun. 25 juil. 2011 12:30
par servabat
Bonjour,

je connaisait wireshark (et je l'utilisait), mais pas IEInspector :)

Voila le TCPStream :

Code : Tout sélectionner

POST /api/scan_file.json HTTP/1.1
Host: http://www.virustotal.com
User-Agent: AutoItScript/3.3.6.1
Connection: close
Content-Type: multipart/form-databoundary=44535000
Content-Length: 10859


key=clée d'api
--44535000
Content-Disposition: form-dataname="file"filename="C:\Documents and Settings\Jean Yves\Mes documents\zrs.exe"
Content-Type: application/octet-stream


[Hexa - Faisait planter l'envoi du post]
--44535000--HTTP/1.0 500 Internal Server Error
Date: Mon, 25 Jul 2011 10:18:38 GMT
Server: Apache
Content-Length: 21
Content-Type: text/html
X-Cache: MISS from viruskill2.hispasec.com
Via: 1.1 viruskill2.hispasec.com:80 (squid/2.7.STABLE9)
Connection: close


internal server error
Je ne comprend pas où est l'erreur... :/

Re: [..] Http Post File

Posté : lun. 25 juil. 2011 14:08
par timmalos
Je ne peux pas tout vérifier, mais si votre reqûete envoyée par Autoit est la même que celle envoyée par votre navigateur, c'est qu'il existe un système de protection.
Je pense que tout simplement VirusTotal.Com s'est prémunis contre ce genre de requête.
Trop facile de faire un utilitaire qui va spam leur site sans faire leur pub tout simplement ou encore pire envoyer des masses de fichiers (Un transfert de fichier coute beaucoup en bande passante)

Il existe des systèmes de jetons (token) qui bloquent les requêtes si elles ne le possèdent pas, ce qui empeche l'automatisation de ce genre de site.


Il vous faut obligatoirement passer par _IE ou _FF en arrière plan pour pouvoir contourner cette protection, ou posséder un niveau en protocole HTTP bien supérieur au mien. (Il faut read certaines pages avant d'effectuer le post, lire les referer, cookies et les retransmettre et bien d'autre chose.)

Re: [..] Http Post File

Posté : lun. 25 juil. 2011 14:18
par PandiPanda
C'est fou je connaissais pas ce logiciel "IEInspector"
Je l'ai installé, et je me casse vraiment plus la tête pour me faire mes requêtes POST :shock:

J'adore :oops:

Edit: ca serai bien de mettre votre code en "spoiler". Merci ^^

Re: [..] Http Post File

Posté : lun. 25 juil. 2011 14:29
par timmalos
Vous avez également un plugin firefox très sympa et gratuit (contrairement à IEInspector) nommé HTTPFox

Re: [..] Http Post File

Posté : lun. 25 juil. 2011 14:31
par PandiPanda
C'est gentil, mais je suis pas fan de firefox ...
< suis sur Safari ^^

Mais c'est vrai que l'évaluation de 15 jours va devenir ennuyante :cry: ...
M'enfin je trouverai bien une solution :D

Re: [..] Http Post File

Posté : lun. 25 juil. 2011 18:56
par servabat
Non, en fait j'utilise une API donc je doute que le problème vienne d'un quelconque système anti-spam...