如何拦截Web表单中的http POST数据

时间:2012-05-15 09:43:37

标签: android http browser intercept

我有一个网页(在浏览器中显示,不是WebView ),我想将一些数据(例如使用http POST)传递给常规的Android应用程序。

我只需要启动应用程序并提供数据。我知道应用程序可以通过注册一个意图过滤器来启动,但我在数据传递部分丢失了。

没有必要让网址真实,假网址也不错。

可以使用HTTP过滤器在BlackBerry中完成此操作。有没有办法在Android中做同样的事情?

提前致谢。

3 个答案:

答案 0 :(得分:4)

在您的网页中添加以下链接:

<a href="my.special.scheme://xyz.com/data1/data2">

在您的活动onCreate()中,您可以通过意图对象访问数据..

Uri data = getIntent().getData();
String scheme = data.getScheme(); // "http"
String host = data.getHost(); // "xyz.com"
List<String> params = data.getPathSegments(); 
String first = params.get(0); // "data1"
String second = params.get(1); // "data2"

答案 1 :(得分:2)

我将研究的方法是在应用程序中实现一个非常简单的HTTP服务器服务。为您的确切目的编写一个小型Web服务器非常简单:在TCP端口80上侦听,接受传入连接,然后继续从套接字读取,直到\r\n\r\n看到跳过标题,然后读取POST数据。您的网页可能会通过'localhost'访问它。我不知道这种方法是否存在任何重大障碍,但在进行快速搜索时我已经看到已经有小型Android网络服务器可用,所以在技术上似乎是可能的。

答案 2 :(得分:1)

这是我的两分钱:

虽然实际上没有拦截,但这种方法使用传统的Intent Filter机制完成工作。

示例:

  1. 浏览器会打开指向myownscheme的链接://myfakeurl.fake/http%3A%2F%2Factualurl.com
  2. Android应用与意图过滤器匹配并启动。它解析URL中的参数并对其进行解码,获取“http://actualurl.com”
  3. Android应用程序与传递的url建立连接并获取数据。

        String encodedURL = getIntent().getData().getPathSegments().get(0); //Returns http%3A%2F%2Factualurl.com
        String targetURL = Html.fromHtml(encodedURL); //Returns http://actualurl.com
        //Now do the GET and fetch the data.