La pregunta hecha aquí: How can I send an HTTP POST request to a server from Excel using VBA? es casi exactamente lo que estaba buscando, excepto que estoy tratando de enviar una serie de archivos al servidor. Busqué en Google y encontré How do I upload a zip file via HTTP post using VBA?. Esto también fue bueno, pero bastante desalentador, parece mucho trabajo (no solo hacer un formulario HTML aquí ...).¿Cómo enviar archivos a través de HTTP_POST con Excel usando VBA?
Opción # 2 aquí: http://www.motobit.com/tips/detpg_post-binary-data-url/ (como se menciona en la pregunta sobre SO mencionada anteriormente) parece que funcionaría bien, pero como trabajo en JS y CSS, no tengo idea de cómo crear FormData (los archivos binarios a enviar al servidor) en el ejemplo.
¿Alguien puede ayudarme? Básicamente, quiero enviar de 3 a 6 archivos a través de HTTP_POST a través de VBA desde Excel a una secuencia de comandos PHP en un servidor web que está esperando datos de formularios como. Un formulario HTML para manejar este sería el resultado:
<form action="upload_file.php" method="post" enctype="multipart/form-data">
<input name="userfile[]" type="file" /><br />
<input name="userfile[]" type="file" /><br />
<input name="userfile[]" type="file" /><br />
<input type="submit" />
</form>
Gracias a todos de antemano.
EDITAR - 2 ° de agosto 2012
todavía estoy tratando de trabajar en este tema. No sé VBA/6, básicamente JS básico, así que estoy un poco perdido. Aquí es lo que he hecho hasta ahora:
Sub HTTPInternetPutFile()
' create new object with WinHttpRequest for this operation
Dim WinHttpReq As Object
Set WinHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")
Dim FormFields As String
' initialize variables that we will set and pass as parameters
Dim sfpath
Dim strURL As String
Dim StrFileName As String
StrFileName = "CLIPrDL.csv"
sfpath = "C:\CLIPr\"
strURL = "http://s0106001c10187ab1.gv.shawcable.net/uploadtest/upload_file.php"
WinHttpReq.Open "POST", strURL, False
' Set headers
WinHttpReq.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
WinHttpReq.setRequestHeader "Accept-Charset", "ISO-8859-1,utf-8"
WinHttpReq.setRequestHeader "Content-Type", "multipart/form-data"
' WinHttpReq.setRequestHeader "Content-Type", "text/html;charset=UTF8"
WinHttpReq.setRequestHeader "Content-Disposition", "form-data; name=""userfile[]"""
' I dont understand this... why use fileup??
FormFields = """filename=" & StrFileName & """"
FormFields = FormFields & "&"
FormFields = FormFields & sfpath
' so comment it out for now
' WinHttpReq.Send FormFields
WinHttpReq.Send sfpath & StrFileName
' output this var to a message box becuase I dont know what it does really
MsgBox FormFields
' Display the status code and response headers.
MsgBox WinHttpReq.GetAllResponseHeaders
MsgBox WinHttpReq.ResponseText
End Sub
Los cuadros de mensaje en la parte inferior de la secuencia de comandos de salida hacen encabezados y respuesta (página HTML en blanco) del servidor. Siento que hay algo que no estoy configurando en los encabezados para hacer feliz al servidor (nota: tratando de comentar el tipo de contenido).
Si alguien tiene experiencia en utilizar el objeto WinHttpRequest en VBA/6 para POSTAR un archivo binario a través de HTTP, ¡por favor ayuda! :)
¿Qué tipo de archivos: texto o binario? –
¿Sería capaz de enviar los archivos uno por uno? ¿O eso no es una opción? – ikh
@TimWilliams binary, excel files. – jonathanbell