0

我制作了一个 java 程序,它调用并使用来自的 xml 提要http://www.somewhereinblog.net/indexblog/rss并且工作正常。

但是当我制作了一个 android 版本并调用它时,程序找不到主机,因为这个站点有一个移动版本是 m.somewhereinblog.net ,每当我尝试调用提要 url 时,它会自动更改它的 url 并转到m.somewhereinblog.net/indexblog/rss 没有饲料。

那么如何强制我的手机不拨打手机版呢?请有任何想法或帮助

4

1 回答 1

1

该网站正在根据它收到的 User-Agent 标头重定向您的 Android 程序。解决方法:在检索提要时发送桌面用户代理标头。查看http://www.useragentstring.com/pages/useragentstring.php以获取 User-Agent 标头的详尽列表。

根据您的评论 - 这是一个澄清。当浏览器连接到网络服务器时,它会在其标头中发送一个用户代理字符串。User-Agent 识别客户端请求,通常指定操作系统、它使用的浏览器版本等。

例如,运行 Android 的移动浏览器可能会将自己标识为:

User-Agent: Mozilla/5.0 (Linux; U; Android 2.2.1; en-ca; LG-P505R Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

而 Windows 8 上的桌面浏览器可能会发送如下内容:

User-Agent: Mozilla/6.0 (Windows NT 6.2; WOW64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1

请注意,在上面的示例中,User-Agent 包含有关操作系统以及发起请求的浏览器的版本和名称的信息。Web 服务器使用此信息来确定应提供哪些页面。

由于您在 Android 上的程序在请求提要时被重定向到移动页面,因此您在 Android 上用于生成请求的 API 很可能正在发送一个将其标识为移动设备的 User-Agent 字符串。

解决方法是覆盖在标头中发送的 User-Agent 字符串,以便网络服务器认为请求来自桌面系统。这就是我发布指向用户代理字符串列表的链接的原因 - 以便您可以选择和测试不同的设置。

总而言之 - 您不需要请求不同的 URL - 从与桌面版本相同的 URL 请求提要,但确保传递给网络服务器的标头中的 User-Agent 字符串将请求识别为来自桌面浏览器和不是移动版本,以避免被重定向到移动版本。

于 2013-02-12T07:10:01.593 回答