quarta-feira, 27 de agosto de 2008

Requisitando páginas por POST(Página que retorna um XML) - C#, ASP.NET

Como nada é impossível e as vezes temos que tentar, coloco o código abaixo para ajudar aqueles que precisam resgatar o xml de uma página, seja ela feita em ASP, ASP.NET, PHP, Java, ou etc.
Lembrando que ela resgata qualquer contéudo mesmo se ele não for xml(podendo ele ser HTML).

//necessario adicionar as classes abaixo
using System.Net;
using System.Text;
using System.IO;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;

///
/// Summary description for RequisicaoPagina
///

public class RequisicaoPagina
{
public RequisicaoPagina()
{
//
// TODO: Add constructor logic here
//
}
///
/// Posta dados para uma página e pega o retorno.
/// Passa somente um parametro.
/// Utilizado principalmente com serviços que recebem parametros por POST e retornam um XML.
/// Estes serviços não são WebServices.
/// Url que receberá os parametros
/// Nome do parametro a ser postado
/// Valor do Parametro a ser postado
///
public static string EnviarDadosPost(string Url, string Parametro, string Valor)
{
// Usado para receber o xml
StringBuilder sb = new StringBuilder();

// Usado para cada operação de leitura da saída
byte[] buf = new byte[8192];

// É necessário caso a página esteja em ssl
ServicePointManager.ServerCertificateValidationCallback += AcceptAllCertificatePolicy;

//criando o request
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);

request.Credentials = CredentialCache.DefaultCredentials;

request.Method = "POST";

//Adicionando os parametros a serem postados
string postData = Parametro+"="+Valor;
byte[] byteArray = System.Text.Encoding.GetEncoding("iso-8859-1").GetBytes(postData);

// Tipo do conteudo a ser requisitado
request.ContentType = "application/x-www-form-urlencoded";

// Tamanho do conteudo da requisição
request.ContentLength = byteArray.Length;

// criando stream da requisição
Stream dataStream = request.GetRequestStream();

// armazendo os dados da requisição no stream
dataStream.Write(byteArray, 0, byteArray.Length);

// fechando a requisição
dataStream.Close();

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

Stream resStream = response.GetResponseStream();

string tempString = null;
int count = 0;

do
{
// Carrega o buffer com os dados enviados
count = resStream.Read(buf, 0, buf.Length);

// Se contiver dados carregará o stringBuilder
if (count != 0)
{
// Converte os Bytes para caracteres ASCII
//tempString = Encoding.ASCII.GetString(buf, 0, count);
tempString = System.Text.Encoding.GetEncoding("iso-8859-1").GetString(buf, 0, count);

// Adiciona ao stringBuilder
sb.Append(tempString);
}
}
while (count > 0); // verifica se existe mais dados para ler

string Retorno = sb.ToString();

return Retorno;
}

}

Foi dada a largada

Galera,
Este blog é para a galera de TI da Casanova e Web Prêmios compartilhar experiências de código fonte ASP.NET e C#.
Vamo que vamo.