我在HttpURLConnection和OutputStreamWriter方面挣扎。
代码实际上到达了服务器,因为我确实收到了有效的错误响应。发出了POST请求,但服务器端未收到任何数据。
正确使用此东西的任何提示均受到高度赞赏。
该代码在AsyncTask中
protected JSONObject doInBackground(Void... params) {
try {
url = new URL(destination);
client = (HttpURLConnection) url.openConnection();
client.setDoOutput(true);
client.setDoInput(true);
client.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
client.setRequestMethod("POST");
//client.setFixedLengthStreamingMode(request.toString().getBytes("UTF-8").length);
client.connect();
Log.d("doInBackground(Request)", request.toString());
OutputStreamWriter writer = new OutputStreamWriter(client.getOutputStream());
String output = request.toString();
writer.write(output);
writer.flush();
writer.close();
InputStream input = client.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
StringBuilder result = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
result.append(line);
}
Log.d("doInBackground(Resp)", result.toString());
response = new JSONObject(result.toString());
} catch (JSONException e){
this.e = e;
} catch (IOException e) {
this.e = e;
} finally {
client.disconnect();
}
return response;
}
我正在尝试发送的JSON:
JSONObject request = {
"action":"login",
"user":"mogens",
"auth":"b96f704fbe702f5b11a31524bfe5f136efea8bf7",
"location":{
"accuracy":25,
"provider":"network",
"longitude":120.254944,
"latitude":14.847808
}
};
我从服务器得到的响应:
JSONObject response = {
"success":false,
"response":"Unknown or Missing action.",
"request":null
};
我应该得到的回应是:
JSONObject response = {
"success":true,
"response":"Welcome Mogens Burapa",
"request":"login"
};
服务器端PHP脚本:
<?php
$json = file_get_contents('php://input');
$request = json_decode($json, true);
error_log("JSON: $json");
error_log('DEBUG request.php: ' . implode(', ',$request));
error_log("============ JSON Array ===============");
foreach ($request as $key => $val) {
error_log("$key => $val");
}
switch($request['action'])
{
case "register":
break;
case "login":
$response = array(
'success' => true,
'message' => 'Welcome ' . $request['user'],
'request' => $request['action']
);
break;
case "location":
break;
case "nearby":
break;
default:
$response = array(
'success' => false,
'response' => 'Unknown or Missing action.',
'request' => $request['action']
);
break;
}
echo json_encode($response);
exit;
?>
以及Android Studio中的logcat输出:
D/doInBackground(Request)﹕ {"action":"login","location":{"accuracy":25,"provider":"network","longitude":120.254944,"latitude":14.847808},"user":"mogens","auth":"b96f704fbe702f5b11a31524bfe5f136efea8bf7"}
D/doInBackground(Resp)﹕ {"success":false,"response":"Unknown or Missing action.","request":null}
如果附加?action=login
到,则URL
可以从服务器获得成功响应。但是只有 动作 参数在服务器端注册。
{"success":true,"message":"Welcome ","request":"login"}
结论必须是没有数据通过 URLConnection.write(output.getBytes("UTF-8"));
好吧,数据毕竟会被传输。
@greenaps提供的解决方案可以解决问题:
$json = file_get_contents('php://input');
$request = json_decode($json, true);
上面的PHP脚本已更新以显示解决方案。
echo (file_get_contents('php://input'));
将向您显示json文本。像这样工作:
$jsonString = file_get_contents('php://input');
$jsonObj = json_decode($jsonString, true);
我在纠结HttpURLConnection和OutputStreamWriter。 代码实际上到达了服务器,因为我确实得到了有效的错误响应。发出POST请求,但服务器端未接收到数据。 任何关于正确使用这种东西的提示都是非常感谢的。 代码在异步任务中 我尝试发送的JSON: 我从服务器得到的回应是: 我应该得到的回应是: 服务器端 PHP 脚本: 以及 Android Studio 中的 logca
问题内容: 我已经开发了一个Java代码,该代码使用URL和HttpUrlConnection将以下cURL转换为Java代码。卷曲是: 我已经编写了此代码,但是它始终会给HTTP代码400错误的请求。我找不到丢失的内容。 问题答案: 你的JSON不正确。代替 写 因此,JSONObject.toString()应该只为外部对象调用一次。 另一件事(可能不是你的问题,但我想提一下): 为确保不会遇
问题内容: 我想使用对服务器进行一些API调用。但是请求未成功,返回: 因此,我想检查发送到服务器的“真实”内容是什么。实际内容是指确切的HTTP请求。 有什么想法可以看到吗? 编辑: 根据此处的第一个答案,我应该澄清我的问题:我想避免使用外部程序(例如HTTP嗅探器)或其他任何东西,而我希望有一个函数或一个属性或任何包含我要查找的信息的东西。 如果不是这种情况,有人知道该信息是否可以手动重建(例
我已经写了这段代码,但它总是给HTTP代码400错误的请求。我找不到丢失的东西。
问题内容: 我是一名具有游戏和3D图形背景的程序员,目前我想提高自己的网络和Web开发技能。 为此,我有一项任务要完成。我的想法是,我希望能够发送HTTP请求或类似于运行基于LAMP的安装程序的Web服务器的内容。我想知道如何使用Cocoa Touch框架从iPhone发送包含一些信息的HTTP请求到我的Web服务器。 我希望Web服务器(使用PHP)能够将发送的信息记录到纯文本文件中,以便以后用
我被夹在中间。我想实现一个POST方法,使用HttpUrlConnection向服务器发送注册用户的电子邮件、名称和密码。以下是我的代码: 我不知道我在哪里犯了错误。我收到以下回复 空格后的“0”是超文本传输协议响应代码返回的响应代码。当我在浏览器中尝试时,我的网址是正确的。我不知道我在哪里犯了错误;是我的服务器故障还是我的代码有错误,因为我不认为我的代码有任何交互处理。 我是Android开发的