<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Motanet &#187; Visual Basic</title>
	<atom:link href="http://www.motanet.com.br/category/visual-basic/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.motanet.com.br</link>
	<description>Por uma web mais segura</description>
	<lastBuildDate>Mon, 21 Nov 2011 18:14:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Requisição HTTP (GET e POST) com VB (Visual Basic)</title>
		<link>http://www.motanet.com.br/visual-basic/requisicao-http-get-e-post-com-vb-visual-basic/</link>
		<comments>http://www.motanet.com.br/visual-basic/requisicao-http-get-e-post-com-vb-visual-basic/#comments</comments>
		<pubDate>Thu, 13 May 2010 17:57:30 +0000</pubDate>
		<dc:creator>ldmotta</dc:creator>
				<category><![CDATA[Visual Basic]]></category>

		<guid isPermaLink="false">http://ldmotta.wordpress.com/?p=85</guid>
		<description><![CDATA[Olá mais uma vez!! Aos amantes do VB (minha primeira linguagem de programação). Hoje tabalho com PHP, Python, Javascript e tive a necessidade de fazer uma requisição a um servidor apache, usando o protocolo http com VB. Em minhas pesquisas na net, encontrei muita coisa que infelizmente não funciona &#8220;porque as pessoas insistem em colocar]]></description>
			<content:encoded><![CDATA[<p>Olá mais uma vez!!</p>
<p>Aos amantes do VB (minha primeira linguagem de programação).</p>
<p>Hoje tabalho com PHP, Python, Javascript e tive a necessidade de fazer uma requisição a um servidor apache, usando o protocolo http com VB.</p>
<p>Em minhas pesquisas na net, encontrei muita coisa que infelizmente não funciona &#8220;porque as pessoas insistem em colocar coisas na net que não funcionam?&#8221;, emfim, como sempre chega de enrolação e vamos ao que interessa.</p>
<p>Seguinte, vamos usar uma referência a biblioteca <strong>Microsoft WinHttp Services, version 5.1.</strong></p>
<p><strong>Primeiros Passos:</strong></p>
<ol>
<li>No visual basic, vá em Projetos &gt; Referencess e marque a referência Microsoft WinHttp Services, version 5.1 indicada acima.</li>
<li>Agora crie um módulo e um fomulário padrão no VB.</li>
</ol>
<p><strong>O formulário:</strong></p>
<ul>
<li>1 caixa de texto com Multiline: true e ScrollBar: vertical (Text1)</li>
<li>1 caixa de texto padrão (Text2)</li>
<li>1 botão de comando padrão (<span style="font-weight:normal;"><strong>Command1</strong></span>)</li>
</ul>
<p><strong><br />
</strong></p>
<p><img class="aligncenter size-full wp-image-86" title="formupload" src="http://motanet.com.br/wp-content/uploads/2009/09/formupload.jpg" alt="formupload" width="400" height="300" /><strong>Códificação para o formulário (UploadForm)</strong>:</p>
<pre><span style="color:#0000ff;">Private Sub</span> Command1_Click()
    <span style="color:#0000ff;">Dim</span> nFile <span style="color:#0000ff;">As</span> <span style="color:#0000ff;">String</span>, Retorno As <span style="color:#0000ff;">String</span>
    nFile = "image1.jpg" 'imagem que será enviada e se encontra na pasta do projeto
    Me.Text2 = UploadFiles(nFile, "http://localhost/testes/upload.php?nome=luciano", App.Path)
<span style="color:#0000ff;">End Sub</span></pre>
<p><strong>Codificação para o módulo (UploadScript):</strong></p>
<pre><span style="color:#0000ff;">Option Explicit</span>
<span style="color:#008000;">'Créditos para Joseph Z. Xu (jzxu@napercom.com)
'Modificado por Luciano D. Mota (ldmotta@gmail.com)em 19 de setembro 2009</span>

<span style="color:#0000ff;">Dim </span>WinHttpReq As WinHttp.WinHttpRequest
<span style="color:#0000ff;">Const </span>HTTPREQUEST_SETCREDENTIALS_FOR_SERVER = 0
<span style="color:#0000ff;">Const </span>HTTPREQUEST_SETCREDENTIALS_FOR_PROXY = 1
<span style="color:#0000ff;">Const </span>BOUNDARY = "Xu02=$"
<span style="color:#0000ff;">Const </span>HEADER = "--Xu02=$"
<span style="color:#0000ff;">Const </span>FOOTER = "--Xu02=$--"

<span style="color:#0000ff;">Function </span>UploadFiles(strFileName <span style="color:#0000ff;">As Variant</span>, strURL <span style="color:#0000ff;">As String</span>, DirPath <span style="color:#0000ff;">As Strin</span>g, _
    Optional postVar <span style="color:#0000ff;">As String</span>, Optional strUserName <span style="color:#0000ff;">As String</span>, _
    Optional strPassword <span style="color:#0000ff;">As String</span>) <span style="color:#0000ff;">As String</span>

    <span style="color:#0000ff;">Dim</span> FName <span style="color:#0000ff;">As String</span>
    <span style="color:#0000ff;">Dim </span>strFile <span style="color:#0000ff;">As String</span>
    <span style="color:#0000ff;">Dim</span> strBody <span style="color:#0000ff;">As String</span>
    <span style="color:#0000ff;">Dim </span>aPostBody() <span style="color:#0000ff;">As Byte</span>
    <span style="color:#0000ff;">Dim </span>nFile <span style="color:#0000ff;">As Integer</span>

    <span style="color:#0000ff;">Set </span>WinHttpReq = <span style="color:#0000ff;">New <span style="color:#000000;">WinHttpRequest</span></span>

    <span style="color:#008000;">' Turn error trapping on</span>
    <span style="color:#0000ff;">On Error GoTo </span>SaveErrHandler

    <span style="color:#008000;">' Adiciono a url as variáveis passadas em Text1.</span>
    strURL = strURL &amp; "?" &amp; postVar

    WinHttpReq.Open "POST", strURL, <span style="color:#0000ff;">False
    </span><span style="color:#0000ff;">If </span>strUserName &lt;&gt; "" <span style="color:#0000ff;">And </span>strPassword &lt;&gt; "" <span style="color:#0000ff;">Then</span>
        ' Set the user name <span style="color:#000000;">and </span>password.
        WinHttpReq.SetCredentials strUserName, strPassword, _
        HTTPREQUEST_SETCREDENTIALS_FOR_SERVER
    <span style="color:#0000ff;">End If</span>

   <span style="color:#008000;"> '-------------------------- Becareful not to mingle too much here -----------------------------------
    ' Set the header</span>
    WinHttpReq.SetRequestHeader "Content-Type", "multipart/form-data; boundary=" &amp; BOUNDARY

    <span style="color:#008000;">'-------------------------- Monta o corpo do arquivo para ser enviado -------------------------------
    ' Assemble the body</span>
    strBody = HEADER                        <span style="color:#008000;">' Starting tag</span>
    FName = strFileName
    <span style="color:#008000;">' Grap the file</span>
    strFile = getFile(FName)

    strBody = strBody &amp; vbCrLf &amp; "Content-Disposition: form-data; name=""" &amp; "upload" &amp; _
    (i + 1) &amp; """; filename=""" &amp; FName &amp; """" &amp; vbCrLf &amp; "Content-type: application/pdf" &amp; _
    vbCrLf &amp; vbCrLf &amp; strFile &amp; vbCrLf

    strBody = strBody &amp; "--Xu02=$" ' This is boundary tag between two files
    strFile = ""
    strBody = strBody &amp; FOOTER             <span style="color:#008000;">' Ending tag</span>
   <span style="color:#008000;"> '----------------------------------------------------------------------------------------------------

    ' Because of binary zeros, post body has to convert to byte array</span>
    aPostBody = StrConv(strBody, vbFromUnicode)

    ' Send the HTTP Request.
    WinHttpReq.Send aPostBody

    <span style="color:#008000;">' Display the status code and response headers.</span>
    UploadFiles = WinHttpReq.ResponseText

    <span style="color:#0000ff;">Set </span>WinHttpReq = <span style="color:#0000ff;">Nothing

    </span>E<span style="color:#0000ff;">xit Function</span>
SaveErrHandler:
    UploadFiles = Err.Description
    Set WinHttpReq = <span style="color:#0000ff;">Nothing
</span><span style="color:#0000ff;">End Function</span>

Function getFile(strFileName <span style="color:#0000ff;">As String</span>) <span style="color:#0000ff;">As String</span>
    <span style="color:#0000ff;">Dim </span>strFile <span style="color:#0000ff;">As String</span>

    <span style="color:#008000;">' Grap the file</span>
    nFile = FreeFile
    <span style="color:#0000ff;">Open </span>strFileName <span style="color:#0000ff;">For Binary As </span>#nFile
    strFile = String(LOF(nFile), " ")
    Get #nFile, , strFile
    <span style="color:#0000ff;">Close</span> #nFile

    getFile = strFile
<span style="color:#0000ff;">End Function</span></pre>
<p><strong>Agora o código PHP:</strong></p>
<pre>         /**
	 * Simples upload de arquivo
	 * Lembrando que este upload não deve ser utilizado no projeto real pois não teria segurança alguma, este é só para exemplo já que o foco principal é o objeto WinHttpRequest do visual basic
	 * Author: ldmotta
	 * Recebe a requisição feita pelo visual basic e grava o arquivo enviado no servidor.
	 */

	// Prepara a variável do arquivo
	$arquivo = isset($_FILES["upload"]) ? $_FILES["upload"] : FALSE;

	//Crie uma pasta de nome file no servidor e dê permissão de escrita
	$config["url_img"] = "file/";

	$imagem_dir = $config["url_img"] . $arquivo["name"]

	if($arquivo) {
		// Faz o upload da imagem
		$r = move_uploaded_file($arquivo["tmp_name"], $imagem_dir);
	}

	if(file_exists($imagem_dir));
		echo $imagem_dir; //Retorna a url relativa e o arquivo do upload
	exit;</pre>
<p>Prontinho, qualquer dúvida é só incluir um comentário</p>
]]></content:encoded>
			<wfw:commentRss>http://www.motanet.com.br/visual-basic/requisicao-http-get-e-post-com-vb-visual-basic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

