HttpWebRequest: Jak znaleźć kod pocztowy w Canada Post przez WebRequest z załączonym x-www-form-?

Obecnie piszę kilka testów, dzięki którym mogę poprawić swoje umiejętności dzięki interakcji z Internetem za pomocą Windows Forms. Jednym z takich testów jest znalezienie kodu pocztowego, który powinien zostać zwrócony przez witrynę Canada Post.

Moje domyślne ustawienie adresu URL to:http://www.canadapost.ca/cpotools/apps/fpc/personal/findByCity?execution=e4s1Wymagane pola formularza to:Numer ulicy, Nazwa ulicy, Miasto, województwoTyp contentType to „application / x-www-form-enclosed”

EDYTOWAĆ: Proszę wziąć pod uwagę wartość „application / x-www-encoded” zamiast wartości point 3 jako contentType. (Dzięki EricLaw-MSFT!)

Otrzymany wynik nie jest oczekiwany. Dostaję kod źródłowy HTML strony, na której mogę ręcznie wprowadzić informacje, aby znaleźć kod pocztowy, ale nie kod źródłowy HTML ze znalezionym kodem pocztowym. Jakiś pomysł, co robię źle?

Czy mam rozważyć przejście na sposób XML? Czy po pierwsze możliwe jest anonimowe wyszukiwanie w Canada Post?

Oto przykładowy kod dla lepszego opisu:

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.
}

Wydaje mi się, że utknąłem w szyjce butelki. Nie mogę znaleźć pożądanego rezultatu.

EDYTOWAĆ: Wydaje się, że muszą być parametry jak dla ContentType tej witryny. Pozwól mi wyjaśnić.

Jest jedna ze zmiennymi „meta”, która określa, co następuje:

meta http-equiv = "Content-Type" content = "application / xhtml + xml, text / xml, text / html; charset = utf-8"

I jeszcze jeden kod w dół, który brzmi:

formularz id = "fpcByAdvancedSearch: fpcSearch" name = "fpcByAdvancedSearch: fpcSearch" method = "post" action = "/ cpotools / apps / fpc / personal / findByCity? wykonanie = e1s1" enctype = "application / x-www-form-urlencoded „

Moje pytanie jest następujące: z którym muszę się trzymać?

Niech zgadnę, pierwszy typ ContentType ma być traktowany jako drugi tylko dla innego żądania do funkcji lub po opublikowaniu danych?

EDYTOWAĆ: Na życzenie bliżej rozwiązania jestem pod tym pytaniem:WebRequest: Jak znaleźć kod pocztowy za pomocą WebRequest przeciwko temu ContentType = ”application / xhtml + xml, text / xml, text / html; charset = utf-8 ”?

Dzięki za pomoc! :-)

questionAnswers(2)

yourAnswerToTheQuestion