HttpWebRequest: Como encontrar um código postal no Canada Post através de um WebRequest com x-www-form-enclosed?

Atualmente estou escrevendo alguns testes para que eu possa melhorar minhas habilidades com a interação da Internet através do Windows Forms. Um desses testes é encontrar um código postal que deve ser devolvido pelo site do Canada Post.

Minha configuração de URL padrão está definida como:http://www.canadapost.ca/cpotools/apps/fpc/personal/findByCity?execution=e4s1Os campos de formulário requeridos são:número da rua, nome da rua, cidade, provínciaO contentType é "application / x-www-form-enclosed"

EDITAR: Por favor, considere o valor "application / x-www-form-encoded" em vez do valor do ponto 3 como o contentType. (Obrigado EricLaw-MSFT!)

O resultado que obtenho não é o resultado esperado. Eu recebo o código-fonte HTML da página onde eu poderia inserir manualmente as informações para encontrar o código postal, mas não o código-fonte HTML com o código postal encontrado. Alguma ideia do que estou fazendo errado?

Devo considerar o caminho XML? Em primeiro lugar, é possível pesquisar no Canada Post anonimamente?

Aqui está um exemplo de código para melhor descrição:

public static string FindPostalCode(ICanadadianAddress address) {
   var postData = string.Concat(string.Format("&streetNumber={0}", address.StreetNumber)
    , string.Format("&streetName={0}", address.StreetName)
    , string.Format("&city={0}", address.City)
    , string.Format("&province={0}", address.Province));

   var encoding = new ASCIIEncoding();
   byte[] postDataBytes = encoding.GetBytes(postData);
   request = (HttpWebRequest)WebRequest.Create(DefaultUrlSettings);
   request.ImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Anonymous;
   request.Container = new CookieContainer();
   request.Timeout = 10000;
   request.ContentType = contentType;
   request.ContentLength = postDataBytes.LongLength;
   request.Method = @"post";
   var senderStream = new StreamWriter(request.GetRequestStream());
   senderStream.Write(postDataBytes, 0, postDataBytes.Length);
   senderStream.Close();
   string htmlResponse = new StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd();

   return processedResult(htmlResponse); // Processing the HTML source code parsing, etc.
}

Eu pareço preso em um gargalo no meu ponto de vista. Não encontro saída para o resultado desejado.

EDITAR: Parece haver parâmetros para o ContentType deste site. Deixe-me explicar.

Há um com as "meta" -variáveis ​​que estipula o seguinte:

meta http-equiv = "Tipo de conteúdo" content = "aplicativo / xhtml + xml, texto / xml, texto / html; charset = utf-8"

E outro mais tarde abaixo o código que é lido como:

form id = "fpcByAdvancedSearch: fpcSearch" nome = "fpcByAdvancedSearch: fpcSearch" método = "postar" ação = "/ cpotools / apps / fpc / pessoal / findByCity? execução = e1s1" enctype = "aplicativo / x-www-form-urlencoded "

Minha pergunta é a seguinte: com qual devo ficar?

Deixe-me adivinhar, o primeiro ContentType deve ser considerado como o segundo é apenas para outro pedido para uma função ou assim quando os dados são postados?

EDITAR: Conforme o pedido, o mais próximo da solução que eu sou está listado nesta questão:WebRequest: Como encontrar um código postal usando um WebRequest contra este ContentType = ”application / xhtml + xml, text / xml, text / html; charset = utf-8 ”?

Obrigado por qualquer ajuda! :-)

questionAnswers(2)

yourAnswerToTheQuestion