【问题标题】:Dissecting site to clone AJAX request and get XML剖析站点以克隆 AJAX 请求并获取 XML
【发布时间】:2011-04-08 14:29:28
【问题描述】:

我正在尝试开发一个显示网站数据的 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);

但我无法真正弄清楚,即使我用谷歌搜索了这些方法。 “application/x-www-form-urlencoded”是不是意味着url被编码了,我无法重现请求?

如果你能指点我一些文献来弄清楚,我将非常感激。

最好的问候,

安德鲁

【问题讨论】:

    标签: javascript asp.net android


    【解决方案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。如果是这样,您需要解析您的第一次调用以查找这些值并在下一个请求中使用它们。

    【讨论】:

    • 谢谢!那我会坚持下去的。
    【解决方案2】:

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

    它是 URL 编码的只是意味着某些特殊字符被转义。如果你有一个带有等号或 & 符号的值,如果该字符没有转义,它会搞砸格式。如果您有一个值为“apples & oranges”的键“foo”,则与号将替换为%26,空格将替换为%20+。所以序列化的application/x-www-form-urlencoded 数据将是foo=apples%20%26%20oranges

    您可以使用 JavaScript 控制台进行编码,方法是使用 encodeURIComponent 函数对键或值进行编码,并使用 decodeURIComponent 函数对编码字符串进行解码。

    维基百科上有更多信息:http://en.wikipedia.org/wiki/X-www-form-urlencoded

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-01
      • 2013-02-03
      • 2016-10-01
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多