type tipo respuesta pero found expected esperaba encontrĂ³ content contenido cliente charset but c# windows-8 http-headers

c# - tipo - Solicitud HttpClient como navegador



client found response content type of text html charset utf 8 but expected text xml (4)

Cuando llamo al sitio www.livescore.com por la clase HttpClient, siempre obtengo el error "500". Probablemente servidor bloqueado solicitud de HttpClients.

1) ¿Hay algún otro método para obtener html de la página web?

2) ¿Cómo puedo configurar los encabezados para obtener contenido html?

Cuando configuro los encabezados como en el navegador, siempre obtengo contenido codificado en stange.

http_client.DefaultRequestHeaders.TryAddWithoutValidation("Accept", "text/html,application/xhtml+xml,application/xml"); http_client.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Encoding", "gzip, deflate"); http_client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0"); http_client.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Charset", "ISO-8859-1");

3) ¿Cómo puedo slove este problema? ¿Alguna sugerencia?

Utilizo la aplicación Windows 8 Metro Style en C # y HttpClientClass


Aquí tienes, ten en cuenta que debes descomprimir el resultado codificado de gzip que recibes de acuerdo con mleroy :

private static readonly HttpClient _HttpClient = new HttpClient(); private static async Task<string> GetResponse(string url) { using (var request = new HttpRequestMessage(HttpMethod.Get, new Uri(url))) { request.Headers.TryAddWithoutValidation("Accept", "text/html,application/xhtml+xml,application/xml"); request.Headers.TryAddWithoutValidation("Accept-Encoding", "gzip, deflate"); request.Headers.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0"); request.Headers.TryAddWithoutValidation("Accept-Charset", "ISO-8859-1"); using (var response = await _HttpClient.SendAsync(request).ConfigureAwait(false)) { response.EnsureSuccessStatusCode(); using (var responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false)) using (var decompressedStream = new GZipStream(responseStream, CompressionMode.Decompress)) using (var streamReader = new StreamReader(decompressedStream)) { return await streamReader.ReadToEndAsync().ConfigureAwait(false); } } } }

llamar a tales como

var response = await GetResponse("http://www.livescore.com/").ConfigureAwait(false); // or var response = GetResponse("http://www.livescore.com/").Result;


Creo que puede estar bastante seguro de que han hecho todo lo posible para evitar que los desarrolladores hagan capturas de pantalla.

Si intento desde un proyecto estándar de C # usando este código:

var request = WebRequest.Create("http://www.livescore.com "); var response = request.GetResponse();

Me sale esta respuesta:

The remote server returned an error: (403) Forbidden.



Varias cosas a tener en cuenta.

  1. Ese sitio requiere que proporcione un agente de usuario, o devuelve un error 500 HTTP.

  2. Una solicitud GET para livescore.com responde con un 302 a livescore.us. Debe manejar la redirección o solicitar directamente livescore.us

  3. Necesitas descomprimir una respuesta comprimida con gzip

Este código funciona con el perfil de cliente .NET 4. Le permitiré averiguar si se ajusta a una aplicación de la Tienda Windows.

var request = (HttpWebRequest)HttpWebRequest.Create("http://www.livescore.com"); request.AllowAutoRedirect = true; request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17"; string content; using (var response = (HttpWebResponse)request.GetResponse()) using (var decompressedStream = new GZipStream(response.GetResponseStream(), CompressionMode.Decompress)) using (var streamReader = new StreamReader(decompressedStream)) { content = streamReader.ReadToEnd(); }