【问题标题】:How to send POST request to local server PHP script using Volley?如何使用 Volley 向本地服务器 PHP 脚本发送 POST 请求?
【发布时间】:2015-08-03 08:00:32
【问题描述】:

我正在尝试将值发布到在本地服务器上运行的脚本。我的代码如下:

 final String data = "poet=nazmul";
        //Toast.makeText(getApplicationContext(), "ok", Toast.LENGTH_LONG).show();
        StringRequest request = new StringRequest(Request.Method.POST, "http://192.168.1.112:8080/api/post.php?" + data, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Toast.makeText(getApplicationContext(), response, Toast.LENGTH_LONG).show();
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                Toast.makeText(getApplicationContext(), volleyError.toString(), Toast.LENGTH_LONG).show();
            }
        });
        AppController.getInstance().addToRequestQueue(request);

但是本地服务器没有响应。我的php代码是:

<?php
 $poet = $_POST['poet']; 
 echo json_encode(array('poet'=>$poet));
?>

当我直接在网络浏览器中打开 URL 时,我收到此错误:

注意:未定义索引:poet in C:\xampp\htdocs\api\post.php 上线 2 {"诗人":null}

我该如何解决这个问题? 主要问题是 Windows 防火墙,它阻止我连接到本地服务器,在禁用它并将 php 代码 $_POST 更改为 $_GET 后,一切似乎都正常。谢谢大家的帮助。

【问题讨论】:

  • 不,我正在使用真实设备进行尝试
  • 这可能是个愚蠢的问题,但您能否打开浏览器访问该 URL 并获得您期望的 JSON 响应?
  • 首先您可以使用网络浏览器来测试您的网址
  • 当我在我的电脑浏览器中发布网址时:此输出出现注意:未定义索引:第 2 行 C:\xampp\htdocs\api\post.php 中的诗人 {"poet":null}
  • 你的意思是你的手机连接了电脑,你想和电脑上的php脚本通信?

标签: php android web-services localhost android-volley


【解决方案1】:

由于 ? 的串联,您正在执行获取请求和 + 数据。如果您将服务器脚本 $_POST 更改为 $_GET 并将 Request.Method.POST 更改为 Request.Method.GET 这将起作用。

【讨论】:

  • 您可以在 POST 和 GET 中使用 URL 参数。如果方法调用指定 POST,那么 POST 就是他正在使用的。
【解决方案2】:

您正在使用 POST 向脚本提交数据(在这种情况下这无关紧要,但如果它正在改变某些东西——不是幂等的——你必须这样做)。通常,使用 POST 提交的数据将具有随请求一起发送的请求正文,而不是像您在此处使用的 URL 参数。

两者都很好,但不幸的是 PHP 的 $_POST 字典只能从消息正文中获取值,而不是 URL 参数($_GET 引用)。要访问它们,您需要通过访问$_SERVER['REQUEST_URI'] 变量来parse the request URI yourself

如果您永远不会使用此请求更改服务器的状态,则将请求类型更改为 GET 是合适的。请阅读this question and answers 以更深入地了解 GET 和 POST 之间的差异以及使用 URL 参数。

或者,如果您根本不想更改 PHP 脚本,则需要修改 Android 代码以在请求正文中发送数据(而不是作为 URL 参数)。请参阅this question 了解一些方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 2017-06-30
    • 2022-10-25
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多