如何使用 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 数据