私は現在、Windowsフォームを介したインターネットインタラクションのスキルを向上させるためにいくつかのテストを書いています。それらのテストの1つは、CanadaPostWebサイトから返される郵便番号を見つけることです。
- 私のデフォルトのURL設定は次のように設定されています:http://www.canadapost.ca/cpotools/apps/fpc/personal/findByCity?execution = e4s1
- 必須のフォームフィールドは次のとおりです。streetNumber、streetName、city、province
- contentTypeは「application/x-www-form-enclosed」です
編集: contentTypeとして、ポイント3の値ではなく「application/x-www-form-encoded」の値を考慮してください。(EricLaw-MSFTに感謝します!)
私が得た結果は期待された結果ではありません。郵便番号を見つけるための情報を手動で入力できるページのHTMLソースコードを取得しましたが、見つかった郵便番号を含むHTMLソースコードは取得できません。私が間違っていることについて何か考えはありますか?
XMLを使用することを検討しますか?まず、Canada Postを匿名で検索することは可能ですか?
説明をわかりやすくするためのコードサンプルを次に示します。
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.
}
私の視点では、ボトルネックに引っかかっているように見えます。希望する結果が得られません。
編集:このサイトのContentTypeに関してはパラメータが必要なようです。説明させてください。
- 次のことを規定する「メタ」変数を持つものがあります。
meta http-equiv = "Content-Type" content = "application / xhtml + xml、text / xml、text / html; charset = utf-8"
- そしてもう1つは、コードの後半に次のように読み取られます。
form id = "fpcByAdvancedSearch:fpcSearch" name = "fpcByAdvancedSearch:fpcSearch" method = "post" action = "/ cpotools / apps / fpc / personal / findByCity?execution = e1s1" enctype = "application / x-www-form-urlencoded 「」
私の質問は次のとおりです:私はどちらに固執する必要がありますか?
最初のContentTypeは、データが投稿されたときの関数などへの別のリクエスト専用であるため、最初のContentTypeと見なされますか?
編集:リクエストに従って、私がいる解決策に近いものがこの質問の下にリストされています: WebRequest:このContentType =” application / xhtml + xml、text / xml、text/htmlに対してWebRequestを使用して郵便番号を見つける方法; charset = utf-8”?
助けてくれてありがとう!:-)