Я первый опубликовал это: HttpWebRequest: How to find a postal code at Canada Post through a WebRequest with x-www-form-enclosed?.WebRequest: Как найти почтовый индекс с помощью WebRequest против этого ContentType = "application/xhtml + xml, text/xml, text/html; charset = utf-8"?
Следуя предложениям AnthonyWJones, я изменил свой код после его предложений.
В продолжение моего запроса я со временем заметил, что контент-тип Canada Post более вероятен быть «application/xhtml + xml, text/xml, text/html; charset = utf-8 ".
Мои вопросы:
- Как мы WebRequest против такого сайта с содержанием типа?
- Нужно ли продолжать работу с объектом NameValueCollection?
- Согласно Скотту Лэнсу, который щедро предоставил мне ценную информацию в моем предыдущем вопросе, WebRequest вернет тип информации независимо от типа содержимого, я что-то пропустил здесь?
- Должен ли я изменить свой код из-за изменения типа контента?
Вот мой код, чтобы было легче понять мой прогресс.
internal class PostalServicesFactory {
/// <summary>
/// Initializes an instance of GI.BusinessSolutions.Services.PostalServices.Types.PostalServicesFactory class.
/// </summary>
internal PostalServicesFactory() {
}
/// <summary>
/// Finds a Canadian postal code for the provided Canadian address.
/// </summary>
/// <param name="address">The instance of GI.BusinessSolutions.Services.PostalServices.ICanadianCityAddress for which to find the postal code.</param>
/// <returns>The postal code found, otherwise null.</returns>
internal string FindPostalCode(ICanadianCityAddress address) {
if (address == null)
throw new InvalidOperationException("No valid address specified.");
using (ServicesWebClient swc = new ServicesWebClient()) {
var values = new System.Collections.Specialized.NameValueCollection();
values.Add("streetNumber", address.StreetNumber.ToString());
values.Add("numberSuffix", address.NumberSuffix);
values.Add("suite", address.Suite);
values.Add("streetName", address.StreetName);
values.Add("streetDirection", address.StreetDirection);
values.Add("city", address.City);
values.Add("province", address.Province);
byte[] resultData = swc.UploadValues(@"http://www.canadapost.ca/cpotools/apps/fpc/personal/findByCity", "POST", values);
return Encoding.UTF8.GetString(resultData);
}
}
private class ServicesWebClient : WebClient {
public ServicesWebClient()
: base() {
}
protected override WebRequest GetWebRequest(Uri address) {
var request = (HttpWebRequest)base.GetWebRequest(address);
request.CookieContainer = new CookieContainer();
return request;
}
}
}
Этот код фактически возвращает HTML исходный код формы необходимо заполнить необходимую информацию для того, чтобы обработать с почтовым кодом поиска. Я хочу, чтобы получить исходный код HTML или что бы это ни было, с найденным почтовым кодом.
EDIT: Вот WebException я получаю сейчас: «Не удалось отправить тело содержимого с этим типом глагола.» (Это перевод с французского исключения «Impossible d'Envoyer ип кордебалет Contenu ауес се типа де Вербье.»)
Вот мой код:
internal string FindPostalCode(string url, ICanadianAddress address) {
string htmlResult = null;
using (var swc = new ServiceWebClient()) {
var values = new System.Collections.Specialized.NameValueCollection();
values.Add("streetNumber", address.StreetNumber.ToString());
values.Add("numberSuffix", address.NumberSuffix);
values.Add("suite", address.Suite);
values.Add("streetName", address.StreetName);
values.Add("streetDirection", address.StreetDirection);
values.Add("city", address.City);
values.Add("province", address.Province);
swc.UploadValues(url, @"POST", values);
string redirectUrl = swc.ResponseHeaders.GetValues(@"Location")[0];
=> swc.UploadValues(redirectUrl, @"GET", values);
}
return htmlResult;
}
линия, которая вызывает исключение с указателем «=>». Кажется, что я не могу использовать GET как метод, но это то, что мне сказали, чтобы я сделал ...
Любая идея, что мне здесь не хватает? Я пытаюсь сделать то, что Джастин (см. Ответ) рекомендовал мне сделать.
Заранее благодарим за любую помощь! :-)
@Will: пожалуйста, держите нас в курсе; очень заинтересованы в этом вопросе! У вас есть блог? –
@pcambell: Спасибо за ваш интерес. Я буду информировать вас, добавив результаты моих исследований здесь, чтобы вы могли воспользоваться этим. –
У вас есть полное решение? Работает? Я пытаюсь сделать то же самое здесь. Благодаря! – VinnyG