【问题标题】:Getting POST data from HttpRequest (Android)从 HttpRequest (Android) 获取 POST 数据
【发布时间】:2012-04-28 17:01:37
【问题描述】:

在我的 Android 应用程序中,我需要运行 HTTP 网络服务器。初始启动似乎没问题 - 当我使用浏览器导航到该服务器上的页面时,我可以接收请求并处理 URI 字符串(我看到带有所有参数的完整 URI 的 GET 请求)。 但是,如果我使用向服务器提交请求的表单:

<FORM action="http://192.168.1.107:8080/testaction" method="post">
    <INPUT type="text" name="textfield" /><BR>
    <INPUT type="submit" value="Send"/>
 </FORM>

我只在 URI 中获取操作(例如“/testaction”)。我不知道如何获取 POST 请求的实际数据。

这里是java代码中处理请求的部分:

public class HomePageHandler implements HttpRequestHandler {
...
        @Override
        public void handle(HttpRequest request, HttpResponse response, HttpContext httpContext) throws HttpException, IOException {

                String uriString = request.getRequestLine().getUri();
                Uri uri = Uri.parse(uriString);
...
}

我意识到我可能在 java 和/或 HTML 表单本身中做错了什么。请就这两个方面提出建议。

【问题讨论】:

    标签: android http post httprequest


    【解决方案1】:

    要获取 POST 正文,您可以这样做:

    if (request instanceof HttpEntityEnclosingRequest) { //test if request is a POST
        HttpEntity entity = ((HttpEntityEnclosingRequest) request).getEntity();
        String body = EntityUtils.toString(entity); //here you have the POST body
    }
    

    【讨论】:

    • 谢谢,这是正确的做法。然而,一个关键的部分显然是在 HTML 表单中省略了名称字段。当名称不存在时,我会不断地在体内收到 null 。我修改了 HTML sn-p
    • 当我传递数据时,nameValuePairs.add(new BasicNameValuePair("json", jsonData.toString()));当我在服务器上收到它时,正文包含“json=jsonData.toString()”而不是“jsonData.toString()”。
    【解决方案2】:

    请参考here 在android中实现POST请求..

    要使用浏览器进行交叉检查..我可以建议您在 Firebug(在 firefox 上,其他类似)控制台中查看 ajax 发布请求。或http://web-sniffer.net/或http://hurl.it等在线工具

    【讨论】:

    • 谢谢。但我在 Android 中实现服务器,而不是客户端。我正在使用 PC 浏览器向其中提供请求。
    猜你喜欢
    • 2011-02-08
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多