Um pouco de tudo

Enviando um HTTP POST Windows Mobile

Fazer um projeto mobile, mesmo que ele não siga em frente ajuda você a identificar uma série de problemas que você terá que lidar agora ou em outros projetos. Hoje em dia as pessoas esperam um comportamento dos aplicativos muito parecido com o que veem na Internet de seus computadores.

Durante o BunnyMe, tive a necessidade de enviar um formulário web via HTTP POST com um arquivo anexo. O arquivo em questão era justamente a foto tratada com a máscara para se carregar no site. Como não estou num ambiente web, a coisa é um pouco diferente. Num browser, quando você submete um formulário com anexos, ele cuida de toda a formatação necessária. Numa aplicação client (desktop ou mobile) para fazer isso a solução é abrir um canal com o servidor de destino e codificar “na mão” todos o Request e seus parâmetros para ele.

Realmente não é uma tarefa muito amigável, mas a internet é a fonte de muitas soluções. Encontrei nela uma implementação em C# muito boa que implementa uma função que dado o site, uma coleção de parâmetros e uma outra de arquivos, faz toda a codificação, envio e recepção da resposta do servidor.

Essa rotina me ajuda sempre que preciso efetuar um POST fora do ambiente de um browser. Página original aqui.

Um exemplo simples de chamada a rotina:


UploadFile[] files = new UploadFile[]
{
new UploadFile(fileName1),
new UploadFile(fileName2)
};

NameValueCollection form = new NameValueCollection();

form["name1"] = "value1";
form["name2"] = "xyzzy";

string response = UploadHelper.Upload(url, files, form);

Uma chamada mais complexa, se você precisa repassar seus cookies ou credenciais, você precisa criar um objecto de request manualmente e repassá-lo para a função.


UploadFile[] files = new UploadFile[]
{
new UploadFile(fileName1),
new UploadFile(fileName2)
};

NameValueCollection form = new NameValueCollection();

form["name1"] = "value1";
form["name2"] = "xyzzy";

HttpWebRequest req = WebRequest.Create(url);

// set credentials/cookies etc.

HttpWebResponse resp = UploadHelper.Upload(req, files, form);

using (Stream s = resp.GetResponseStream())
using (StreamReader sr = new StreamReader(s))
{
string response = sr.ReadToEnd();
}

Download do código aqui.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s