AutoIt en Español
Bienvenido al foro de Autoit3 en Español.

Aquí encontrarás la documentación oficial del lenguaje y muchos otros recursos relacionados.

Mis mejores deseos de éxitos!

Enviar archivos por http a un php

Ver el tema anterior Ver el tema siguiente Ir abajo

Enviar archivos por http a un php

Mensaje  rameltete el Sáb Oct 22, 2011 6:48 am

Hola a todos:

estoy intentando enviar un archivo utilzando HTTP de forma que se crean las cabeceras del mensaje y un script PHP lo recibe y lo almacena en el servidor.

El script de PHP que recibe la peticion es este:

Código:

<?php
$uploaddir = '/dir/';
$uploadfile = $uploaddir . basename($_FILES['file']['name']);

if ($_POST["user"] == "user" && $_POST["pass"] == "pass") {
   if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
          echo "OK";
   } else {      
          echo "ERROR";
   }
} else {
   echo "ERROR IDENTITY";
}

?>

y el script de autoit es este:

Código:

#include <HTTP.au3>
$host = "dominio"
$port = "80"
$page = "/archivo.php"
$vars = "user=user&pass=pass"

$url = $page&"?"&_HTTPEncodeString($vars)
$socket = _HTTPConnect($host, $port)
$get = _HTTPPost_File($host,$url,$socket,"archivo.zip", "file")
$recv = _HTTPRead($socket,1)
MsgBox(0, "Info", "Data received:" & @CRLF & $recv[4] & @CRLF)

Func _HTTPPost_File($host, $page, $socket = -1, $file = "", $fieldname = "")
    Dim $command

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

    $contenttype = _HTTPPost_contenttype($file)

; Maybe this can be done easier/better?
    $boundary = "------"&Chr(Random(Asc("A"), Asc("Z"), 3))&Chr(Random(Asc("a"), Asc("z"), 3))&Chr(Random(Asc("A"), Asc("Z"), 3))&Chr(Random(Asc("a"), Asc("z"), 3))&Random(1, 9, 1)&Random(1, 9, 1)&Random(1, 9, 1)

    If $contenttype = "text/plain" Then
      $fileopen = FileOpen($file, 0); Open in read only mode
        $fileread = FileRead($fileopen)
        FileClose($fileopen)

        $extra_commands = "--"&$boundary&@CRLF
      $extra_commands &= 'Content-Disposition: form-data; name="MAX_FILE_SIZE"'&@CRLF&@CRLF&'30000'&@CRLF
      $extra_commands &= "--"&$boundary&@CRLF
        $extra_commands &= "Content-Disposition: form-data; name="""&$fieldname&"""; filename=""" & $file & """" &@CRLF
        $extra_commands &= "Content-Type: "&$contenttype&@CRLF&@CRLF
        $extra_commands &= $fileread
      $extra_commands &= "--"&$boundary&@CRLF
      $extra_commands &= 'Content-Disposition: form-data; name="user"'&@CRLF&@CRLF&'user'&@CRLF
      $extra_commands &= "--"&$boundary&@CRLF
      $extra_commands &= 'Content-Disposition: form-data; name="pass"'&@CRLF&@CRLF&'pass'&@CRLF
        $extra_commands &= "--"&$boundary&"--"&@CRLF
    EndIf

    Dim $datasize = StringLen($extra_commands)

    $command = "POST "&$page&" HTTP/1.1"&@CRLF
    $command &= "Host: " &$host&@CRLF
    $command &= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"&@CRLF
    $command &= "Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3"&@CRLF
    $command &= "Accept-Encoding: gzip, deflate"&@CRLF
    $command &= "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"&@CRLF
    $command &= "Connection: close"&@CRLF
    $command &= "Content-Type: multipart/form-data; boundary="&$boundary&@CRLF
    $command &= "Content-Length: "&$datasize&@CRLF
    $command &= $extra_commands&@CRLF

;debug info
    $file = FileOpen("output.txt", 2)
    FileWrite($file, $command)
    FileClose($file)
;end debug info

    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 "html"
            $contenttype = "text/html"
        Case ".htm"
            $contenttype = "text/html"
        Case ".jpg"
            $contenttype = "image/jpeg"
        Case "jpeg"
            $contenttype = "image/jpeg"
        Case ".png"
            $contenttype = "image/png"
        Case ".txt"
            $contenttype = "text/plain"
        Case Else
            $contenttype = "application/octet-stream"
        EndSwitch
    Return $contenttype
EndFunc

Este codigo lo he sacado del foro en ingles y no he conseguido que funcione.

A ver si me podeis hechar una mano y entre todos lo hacemos funcionar.

gracias.

rameltete

Mensajes : 1
Reputación : 0
Fecha de inscripción : 19/09/2011

Ver perfil de usuario

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.