2011-04-08 46 views
1

我试图开发一个显示网站数据的Android应用程序。解剖网站以克隆AJAX请求并获取XML

因此,这里的问题,我已经得到了这个网站:http://gps.skgt-bg.com/Web/SelectByLine.aspx(这是在保加利亚)
它使用ASP.NET和Ajax获得总线的预计抵达时间在我的城市的基础上,搭乘GPS巴士。

因此,基本上你选择交通工具的类型(第一个下拉列表),线路号码(第二个),公共汽车的标题(单选按钮)和站点,你在哪里(第三个下拉列表)。它返回预计巴士停在的时间和分钟,计算结果的时间和公共汽车站的地图。我只对预计的时间和分钟感兴趣。

我想弄清楚它发送到服务器的请求,所以我可以在我的应用程序中复制它,获取XML并在我的应用程序中显示时间。

首先,我不是那种在ASP.NET中有经验的人,所以我不知道是否有某种安全措施,防止这种事情,如果是的话 - 我很抱歉浪费你的时间,但我迄今为止的研究并未表明这一点。

使用Firebug我试图找出它发送WebResource.axd一些参数,标识我感兴趣的服务器上的程序集以及验证是否有任何更改的时间戳。

我的问题是这是可行的,参数是否会发生变化,我的应用程序将需要不断更新? 而且我该如何请求xml?

我看到下面的javascript代码,请求XML站点

xmlRequest.open("POST", theForm.action, true); 
xmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
xmlRequest.send(postData); 

但我真的不能弄清楚,即使我用Google搜索的方法。 “application/x-www-form-urlencoded”是否表示url已编码,我无法重现请求?

如果你能指点我一些文学来弄明白,我会非常感激。

最好的问候,

安德鲁

回答

1

注:我错过了你会从Android应用被解析的部分。我放入了一个编辑请求,将Android添加为标签。

看着那个网站,它应该是可以重现的。这是我在这些场景中所做的。有一个更简单的方法可以做到这一点,但我知道这是有效的:

首先,在Firebug中查看请求并记下所有传入的变量以及请求是否为GET或POST。然后使用HttpWebRequest来打这个页面,以相同的方法传递相同的变量。如果你看到输出包含你需要的数据,你就全部设置好了,这只是解析文本的问题。看看那个网站,WebResource.axd不是你想要调用的页面。它只包含Javascript。该站点使用POST自身重新生成整个页面,因此请仔细研究。

如果这样做不起作用,则需要在执行上述操作之前添加一些步骤。使用HttpWebRequest基本上重新创建一个真正的用户将访问该网站的方式。在这种情况下,您将向http://gps.skgt-bg.com/Web/SelectByLine.aspx发出第一个请求。结合这一点,您将需要使用CookieContainer对象来捕获所有设置的cookie,以便随后的请求将发送相关的cookie数据。如果AJAX请求查找cookie数据,这将有所帮助。接下来,查看AJAX参数,看看它们中的任何一个是否自动.NET参数像__VIEWSTATE一样通过。如果是这样,你需要解析出你的第一个电话来找到这些值,并在下一个请求时使用它们。

+0

谢谢!那我就继续吧。 – Andrew 2011-04-19 10:18:52

1

我想回答关于application/x-www-form-urlencoded内容类型的具体问题。该类型是foo=&1bar=2&etc=morestuff形式的简单键值格式。键和值由等号分隔,并且对由&符号分隔。这是您经常在URL的查询字符串中看到的相同格式。这是迄今为止在POST请求中提交数据的最常见格式。

它是URL编码只是意味着某些特殊字符被转义。如果你有一个等号或者和号的值,那么如果这个角色没有被转义出来,它会搞乱格式。如果您的键值为“foo”,其值为“apples & oranges”,则&符号将替换为%26,而空格替换为%20+。因此,序列化application/x-www-form-urlencoded数据将foo=apples%20%26%20oranges

可以玩弄使用JavaScript控制台使用encodeURIComponent功能编码键或值和decodeURIComponent功能的编码字符串解码编码。

还有一些关于维基百科的更多信息:http://en.wikipedia.org/wiki/X-www-form-urlencoded