Solicitud web: cómo encontrar un código postal mediante una solicitud web en este ContentType = “application / xhtml + xml, text / xml, text / html; conjunto de caracteres = utf-8 ”?

Primero publiqué esto:HttpWebRequest: ¿Cómo encontrar un código postal en Canada Post a través de una solicitud web con x-www-form-enclosed?.

Siguiendo las sugerencias de AnthonyWJones, cambié mi código siguiendo sus sugerencias.

Continuando con mi consulta, he notado con el tiempo que es más probable que el tipo de contenido de Canada Post sea"application / xhtml + xml, text / xml, text / html; charset = utf-8".

Mis preguntas son:

¿Cómo podemos solicitar en la Web contra un sitio web de tipo de contenido?¿Tenemos que seguir adelante con el objeto NameValueCollection?De acuerdo con Scott Lance, quien generosamente me proporcionó información valiosa dentro de mi pregunta anterior, el WebRequest devolverá el tipo de información, sea cual sea el tipo de contenido, ¿me falta algo aquí?¿Tengo que cambiar mi código debido al cambio de tipo de contenido?

Aquí está mi código para que sea más fácil entender mi progreso.

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

Este código realmente devuelve el código fuente HTML del formulario que se debe completar con la información requerida para procesar con la búsqueda del código postal. Lo que deseo es obtener el código fuente HTML o lo que sea con el código postal encontrado.

EDITAR: Aquí está la WebException que recibo ahora: "No se puede enviar un cuerpo de contenido con este tipo de verbo". (Esta es una traducción de la excepción francesa "Impossible d'envoyer un corps de contenu avec ce type de verbe.")

Aquí está mi código:

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

La línea que causa la excepción se señala con "=>". Parece que no puedo usar GET como método, pero esto es lo que me han dicho que haga ...

¿Alguna idea de lo que me estoy perdiendo aquí? Intento hacer lo que Justin (ver respuesta) me recomendó hacer.

¡Gracias de antemano por cualquier ayuda! :-)

Respuestas a la pregunta(1)

Su respuesta a la pregunta