HttpClient来自不同国家的一个回复

时间:2013-01-07 14:01:57

标签: c# .net windows-8

我在Windows应用商店中有一个简单的应用程序。 此应用程序从网站下载并解析HTML。 我使用HttpClient class

现在我遇到了一个很大的问题,因为某个页面看起来与特定国家不同,我的解析也不成功。

示例:当美国某人使用我的应用程序时,应用程序下载不同的HTML内容因为网页在特定国家/地区看起来不同。

如何在http客户端设置默认位置? 我希望在所有执行中都有相同的HTML。

修改 我打电话给这个页面:LINK

5 个答案:

答案 0 :(得分:2)

您需要在发出请求时设置默认语言标头和/或考虑将其设置为用户可定义的设置。

http://www.w3.org/TR/WCAG20-TECHS/SVR5

答案 1 :(得分:2)

暂时忽略最初的问题

请不要编写依赖于任何功能的HTML解析的应用程序。您调用的所有站点都需要在“错误”位置更改一两个ID,并且在您发布更新之前,您的应用程序将对每个用户都失败。

回到答案

好吧,假设你想要使用你的应用程序屏幕抓取方式,并且当然假设你正在抓取的网站允许这样的行为在他们的使用条款中(检查 - 它不会是如果你没有阅读它们就会被起诉的乐趣)那么我建议采用一种稍微不同的方法。

由于无法保证您的用户可以访问您的应用程序的任何区域设置获得相同的页面布局,为什么不设置为您执行解析工作的Web服务,并从您的应用程序询问该服务而不是直接到网站?

您的应用< - >您的网络服务< - >提供数据的网站

这样,您总是知道您要获取的数据的格式一致,就像对于特定的区域设置(您的Web服务器)一样,然后您只需要维护一段代码来解析它。只要底层数据结构发生变化,这将更加简单(并相信我,会有变化)

答案 2 :(得分:0)

答案取决于网站如何实现默认语言选择。其他两个答案都可能是正确的,具体取决于具体网站的工作方式。

如果您可以共享网站网址,我们可以告诉您合适的策略。

答案 3 :(得分:0)

暂时将设计缺陷考虑在内(您可能有或没有充分理由进行屏幕抓取),这里是如何设置Accept-Language标题:

var httpClient = new HttpClient();
var httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, new Uri("http://www.livescore.com"));
httpRequestMessage.Headers.Add("Accept-Language", "en");
var response = await httpClient.SendAsync(httpRequestMessage);
string content = await response.Content.ReadAsStringAsync();

答案 4 :(得分:-1)

尝试始终使用cultureInfo路径参数调用相关网址,如果它有一个,例如说你的目标是microsoft.com,那么你会有类似的东西:

等等。如果这适用于您,这将是一个想法。