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! :-)