我正在尝试开发一个显示网站数据的Android应用。
所以这是交易,我有这个网站: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已编码且无法重现请求?
如果你能指出一些文献来解决这个问题,我将非常感激。
致以最诚挚的问候,
安德鲁
答案 0 :(得分: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一样被传递。如果是这样,您需要解析第一个调用以查找这些值,并在下一个请求中使用它们。
答案 1 :(得分: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