Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Anderson Ferraz

Como fazer um POST em aplicativo VB6?

Recommended Posts

Olá, galera!

 

Estou chegando agora, completamente novato, e peço um pouco de paciência para vocês. http://forum.imasters.com.br/public/style_emoticons/default/natal_wink.gif

 

Bem, aqui na empresa nós estamos implementando algumas funções em nossos aplicativos VB6 para execução de processos via Web, como o envio de arquivos.

 

Conseguimos fazer bastante coisa com a biblioteca MSXML e com o a classe XMLHTTPRequest do Windows, como por exemplo receber o resultado de uma página HTML ou enviar POSTs e GETs para scripts ASP remotos.

 

Só que nós empacamos num problema: enviar um POST para um servidor como se estivéssemos usando um formulário HTML com um controle FILE.

 

Alguém tem alguma idéia de como a gente pode solucionar isso? O XMLHTTPRequest consegue fazer isso pelo VB6?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aff...eta pressa.

 

Eu li seu post até a parte de enviar formulário e não vi a questão do campo FILE ali.

Dá última vez que eu procurei algo sobre isso para fazer em javascript (Ajax) acabei não achando e tendo que apelar para frames escondidos ^^. Uma boa opção de busca é dar uma olhada se já conseguiram fazer com javascript, pois o componente é bem semelhante - para não dizer o mesmo.

 

Esse era o post:

Para fazer o envia via POST com o xmlHTPPRequest você tem que fazer assim:

Dim http As XMLHTTPRequestDim info As Stringhttp.open "POST", "url"info = "campo1=valor1&campo2=valor"http.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"http.setRequestHeader "Content-Length", Len(info)http.send info

Os campos do formulário estão na variavel info. Para colocá-los lá é só seguir a idéia do QueryString das páginas, e sempre lembrando de tratar - URLEncode do ASP por exemplo - os valores para evitar que o usuário modifique alguma coisa que não deve.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela resposta Luiz!

 

Eu já andei lendo algumas coisas na web e vi que com JavaScript não há como fazer porque, por segurança, ele não tem acesso ao sistema de arquivos da máquina cliente.

 

Em se tratando do VB6 eu teria que fazer internamento um processo semelhante ao que o browser faz na hora de montar o cabeçalho para envio, com os dados do formulário e mais o arquivo que quero enviar. É aí que eu estou travado... http://forum.imasters.com.br/public/style_emoticons/default/natal_sad.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Achei uma solução interessante, usando XML com um nó do tipo binário:

 

Function enviarArquivos( strArquivo as String)   Dim ado_stream As ADODB.Stream   Dim xml_dom As msxml2.DOMDocument   Dim xmlhttp As msxml2.xmlhttp      Set ado_stream = New ADODB.Stream   Set xml_dom = New msxml2.DOMDocument      xml_dom.loadXML "<?xml version=""1.0"" ?> <root/>"   xml_dom.documentElement.setAttribute "xmlns:dt", "urn:schemas-microsoft-com:datatypes"   Set 1_node1 = xml_dom.createElement("file1")   1_node1.dataType = "bin.base64"   ado_stream.Type = 1  ' 1=adTypeBinary   ado_stream.open   ado_stream.LoadFromFile strArquivo   1_node1.nodeTypedValue = ado_stream.Read(-1)  ' -1=adReadAll   ado_stream.Close   xml_dom.documentElement.appendChild (l_node1)   Set xmlhttp = New msxml2.xmlhttp   xmlhttp.open "POST", strURL, False   xmlhttp.send xml_dom   enviarArquivos = xmlhttp.responseTextEnd Function

Do lado do servidor tem que haver um script semelhante a esse para armazenar o arquivo:

 

<%@ LANGUAGE=VBScript%><% Option Explicit   Response.Expires = 0       ' define variables and COM objects   dim ado_stream   dim xml_dom   dim xml_file1   ' create Stream Object   set ado_stream = Server.CreateObject("ADODB.Stream")   ' create XMLDOM object and load it from request ASP object   set xml_dom = Server.CreateObject("MSXML2.DOMDocument")   xml_dom.load(request)   ' retrieve XML node with binary content   set xml_file1 = xml_dom.selectSingleNode("root/file1")   ' open stream object and store XML node content into it      ado_stream.Type = 1  ' 1=adTypeBinary    ado_stream.open    ado_stream.Write xml_file1.nodeTypedValue   ' save uploaded file   ado_stream.SaveToFile "c:\temp\teste.jpg" , 2  ' 2=adSaveCreateOverWrite    ado_stream.close   ' destroy COM object      set ado_stream = Nothing    set xml_dom = Nothing   ' write message to browser   Response.Write "Upload successful!"%>

O artigo do qual extraí o texto pode ser encontrado em http://www.15seconds.com/issue/010522.htm

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.