如何使用 HttpURLConnection 在 php 中发送 json 以读取像“php://input”?

Posted

技术标签:

【中文标题】如何使用 HttpURLConnection 在 php 中发送 json 以读取像“php://input”?【英文标题】:How send json in php with HttpURLConnection to read like 'php://input'? 【发布时间】:2018-02-19 20:23:34 【问题描述】:

我尝试从 HttpURLConnection 发送的 json 中读取数据。

活动。

 Gson gson = new GsonBuilder().create();
 String json = gson.toJson(cDati);

 if(FunzioniSalvataggio.getInstance(mContext).saveDataToSend(json,"Inizioservizio_")) 
   new FunzioniInvio().execute(json); 

异步任务。

 URL paginaURL = new URL("http:***");

 HttpURLConnection client = (HttpURLConnection) paginaURL.openConnection();
 client.setChunkedStreamingMode(0);
 client.setDoOutput(true);
 client.setDoInput(true);
 client.setRequestProperty("X-Requested-With", "XMLHttpRequest");
 client.setRequestProperty("Content-Type", "application/json");
 client.setRequestMethod("POST");

 client.connect();

 OutputStreamWriter wr = new OutputStreamWriter(client.getOutputStream());
 wr.write(json);
 wr.flush();

 InputStream risposta = new BufferedInputStream(client.getInputStream());
 dati = mostroDati(risposta);

php

$postdata = file_get_contents("php://input");  
$json = json_decode($postdata, true);

但是当 PHP 页面尝试使用 "php://input" 读取它时,它没有找到数据。怎么做?

【问题讨论】:

在我看来,您在这里缺少很多代码。这个声明中的json 是什么wr.write(json); ?? Json 是一个包含我的对象序列化列表的字符串! 你的 PHP 代码是什么样的?您在服务器端收到任何错误吗? @Barns52 我编辑了一个帖子。 【参考方案1】:

我没有使用OutputStreamWriter,但我使用DataOutputStream 取得了成功。 试试这个并编码你的 json 字符串

DataOutputStream wr = new DataOutputStream(urlConn.getOutputStream());
wr.writeBytes(URLEncoder.encode(json,"UTF-8"));
wr.flush();
wr.close();

我对这段代码没有任何问题。但是,我听说有些人对wr.close(); 声明有疑问。

我建议您对要发送的数据进行 URL 编码。如果您发送的数据中包含一些不寻常的字符,这可能很重要。

【讨论】:

是的,但它不起作用。现在我添加了 client.setRequestProperty("Content-Type", "application/json", "UTF-8");它有效!【参考方案2】:

尝试删除该行:

client.setChunkedStreamingMode(0);

在我的情况下(PHP 7.x)它是罪魁祸首。

【讨论】:

以上是关于如何使用 HttpURLConnection 在 php 中发送 json 以读取像“php://input”?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 HttpURLConnection 在 php 中发送 json 以读取像“php://input”?

如何在Android Studio中使用Java的应用程序后台执行HttpURLConnection之类的任务?

如何从 HttpURLConnection 读取 json 数据

如何使用 HttpURLConnection 发布数据

如何从 HttpURLConnection 实例获取 HTTP 请求字符串

HttpURLConnection如何传递参数?