【问题标题】:Cannot acces post data sent from okhttp from php无法从 php 访问从 okhttp 发送的帖子数据
【发布时间】:2016-08-03 16:57:51
【问题描述】:

我向服务器中的 php 发送带有 json 对象的 post 请求,但 php 一直告诉 $_POST 为空。

这是好的http代码

    public String postConection(JSONObject pJson, String pUrl) throws IOException {
    final MediaType JSON
            = MediaType.parse("application/json; charset=utf-8");

    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
            .permitAll().build();
    StrictMode.setThreadPolicy(policy);

    String dirArchivo = "http://10.0.2.2/SoulStoreProject/"+pUrl;

    OkHttpClient client = new OkHttpClient();

    RequestBody body = RequestBody.create(JSON, pJson.toString());
    Request request = new Request.Builder()
            .url(dirArchivo)
            .post(body)
            .build();
    Response response = client.newCall(request).execute();
    return response.body().string();
}

这是php代码

$nick = $_POST['nick'];
$password = $_POST['password']; 

$query = "
    INSERT INTO 
        players(nick, password) 
        VALUES($nick,$password)
    ";


$DB->Execute($query);

【问题讨论】:

  • 我对框架不熟悉,但通常POST变量是在HTTP头中发送的,而不是请求中的JSON...

标签: php android okhttp3


【解决方案1】:

您以 JSON 格式发布,因此您需要使用 file_get_contents('php://input') 获取帖子,然后对其进行解码,以便将其作为数组保存。

$_POST 仅适用于以enctype=”multipart/form-data” 编码的帖子

$post = json_decode(file_get_contents('php://input'),true);

$nick = $post['nick'];
$password = $post['password']; 

$query = "INSERT INTO players(nick, password) VALUES(?,?)";
$sth = $DB->prepare($query);
$sth->Execute(array($nick, $password));

【讨论】:

  • 谢谢大佬,错误解决了,但我无法插入 de DB,数组可能还是空的吗?
  • 试试var_dump($post)print_r($post)看看post数组里有没有东西
  • 我还在我的答案中添加了一个编辑,以表明如果您使用 PDO,您需要 prepare 声明
  • 这是来自 $post 的转储:array (size=2) 'nick' =&gt ; string 'eeeee' (length=5) 'password' => string 'rrrrrr' (length=6)
  • 只需在$nick = $post['nick']; 行之后执行echo $nick; 并查看是否打印。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-07
相关资源
最近更新 更多