[..] Http Post File

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
servabat
Niveau 4
Niveau 4
Messages : 69
Enregistré le : sam. 02 avr. 2011 16:26
Status : Hors ligne

[..] Http Post File

#1

Message 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,
@++
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Http Post File

#2

Message 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.
servabat
Niveau 4
Niveau 4
Messages : 69
Enregistré le : sam. 02 avr. 2011 16:26
Status : Hors ligne

Re: [..] Http Post File

#3

Message 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... :/
Modifié en dernier par servabat le lun. 25 juil. 2011 18:52, modifié 1 fois.
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Http Post File

#4

Message 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.)
Avatar du membre
PandiPanda
Membre émérite
Membre émérite
Messages : 656
Enregistré le : mar. 19 juil. 2011 14:03
Localisation : Bruxelles
Status : Hors ligne

Re: [..] Http Post File

#5

Message 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 ^^
La seule moralité qui tienne dans un monde cruel est la chance. Impartiale. Équitable. Vraie
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Http Post File

#6

Message par timmalos »

Vous avez également un plugin firefox très sympa et gratuit (contrairement à IEInspector) nommé HTTPFox
Avatar du membre
PandiPanda
Membre émérite
Membre émérite
Messages : 656
Enregistré le : mar. 19 juil. 2011 14:03
Localisation : Bruxelles
Status : Hors ligne

Re: [..] Http Post File

#7

Message 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
La seule moralité qui tienne dans un monde cruel est la chance. Impartiale. Équitable. Vraie
servabat
Niveau 4
Niveau 4
Messages : 69
Enregistré le : sam. 02 avr. 2011 16:26
Status : Hors ligne

Re: [..] Http Post File

#8

Message par servabat »

Non, en fait j'utilise une API donc je doute que le problème vienne d'un quelconque système anti-spam...
Répondre