不要通过 POST 在 Android 上使用 HTTPURLCONNECTION 发送数据
Don't send data via POST with HTTURLCONNECTION on Android
(抱歉我的英语不好)
我有下一个代码通过 POST 将数据发送到服务器。此代码在另一个应用程序中正常工作。但这现在不起作用。 return响应数据是一个函数:
BufferedReader reader = null;
try {
URL url = new URL(path);
HttpURLConnection conecc = (HttpURLConnection) url.openConnection();
conecc.setReadTimeout(5000);
conecc.setConnectTimeout(5000);
conecc.setDoOutput(true);
conecc.setDoInput(true);
conecc.setChunkedStreamingMode(0);
conecc.connect();
Uri.Builder builder = new Uri.Builder()
.appendQueryParameter("name", name)
.appendQueryParameter("birthday", bithday)
.appendQueryParameter("sex", sex);
String query = builder.build().getEncodedQuery();
OutputStream outputstream = conecc.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputstream, "UTF-8"));
writer.write(query);
outputstream.close();
StringBuilder sbuilder = new StringBuilder();
reader = new BufferedReader(new InputStreamReader(conecc.getInputStream()));
String line;
while((line = reader.readLine()) != null) {
sbuilder.append(line + "\n");
}
//writer.flush();
//writer.close();
return sbuilder.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
在服务器上我只有这个 (PHP):
print_r($_POST)
但是我得到一个空数组。然后与服务器的连接正常,但未发送数据。
Array()
我在 conecc.connect() 之前添加了这些行;未成功:
conecc.setRequestProperty("Connection", "Keep-Alive");
System.setProperty("http.keepAlive", "false");
conecc.setRequestProperty("User-Agent", "Mozilla/5.0 ( compatible ) ");
conecc.setRequestProperty("Accept", "*/*");
conecc.setRequestMethod("POST");
您尝试过 conecc.setRequestMethod("POST");
吗?
从您的其余部分 class 来看,似乎没有错别字。但可以肯定的是,检查 String query = builder.build().getEncodedQuery();
是否产生非空结果(只需记录它,或显示为 Toast)。
检查 this 以获得对您的问题的额外帮助。
编辑
检查 this as well 以了解解决问题的其他方法。
因为你看起来像巴西人,如果你不能写你的东西,post 请在评论中使用葡萄牙语 want/need,我们会尽力提供帮助。
我会尽量简单地说,from a similar question
URL url = new URL("http://YOUR_URL.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conecc.setReadTimeout(10000);
conecc.setConnectTimeout(15000);
conecc.setRequestMethod("POST");
conecc.setRequestProperty("Accept-Charset", "UTF-8");
conecc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
conecc.setDoInput(true);
conecc.setDoOutput(true);
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(getQuery(params));
writer.flush();
writer.close();
os.close();
conecc.connect();
在同一个 class:
private String getQuery(List<NameValuePair> params) throws UnsupportedEncodingException
{
StringBuilder result = new StringBuilder();
boolean first = true;
for (NameValuePair pair : params)
{
if (first)
first = false;
else
result.append("&");
result.append(URLEncoder.encode(pair.getName(), "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(pair.getValue(), "UTF-8"));
}
return result.toString();
}
(抱歉我的英语不好) 我有下一个代码通过 POST 将数据发送到服务器。此代码在另一个应用程序中正常工作。但这现在不起作用。 return响应数据是一个函数:
BufferedReader reader = null;
try {
URL url = new URL(path);
HttpURLConnection conecc = (HttpURLConnection) url.openConnection();
conecc.setReadTimeout(5000);
conecc.setConnectTimeout(5000);
conecc.setDoOutput(true);
conecc.setDoInput(true);
conecc.setChunkedStreamingMode(0);
conecc.connect();
Uri.Builder builder = new Uri.Builder()
.appendQueryParameter("name", name)
.appendQueryParameter("birthday", bithday)
.appendQueryParameter("sex", sex);
String query = builder.build().getEncodedQuery();
OutputStream outputstream = conecc.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputstream, "UTF-8"));
writer.write(query);
outputstream.close();
StringBuilder sbuilder = new StringBuilder();
reader = new BufferedReader(new InputStreamReader(conecc.getInputStream()));
String line;
while((line = reader.readLine()) != null) {
sbuilder.append(line + "\n");
}
//writer.flush();
//writer.close();
return sbuilder.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
在服务器上我只有这个 (PHP):
print_r($_POST)
但是我得到一个空数组。然后与服务器的连接正常,但未发送数据。
Array()
我在 conecc.connect() 之前添加了这些行;未成功:
conecc.setRequestProperty("Connection", "Keep-Alive");
System.setProperty("http.keepAlive", "false");
conecc.setRequestProperty("User-Agent", "Mozilla/5.0 ( compatible ) ");
conecc.setRequestProperty("Accept", "*/*");
conecc.setRequestMethod("POST");
您尝试过 conecc.setRequestMethod("POST");
吗?
从您的其余部分 class 来看,似乎没有错别字。但可以肯定的是,检查 String query = builder.build().getEncodedQuery();
是否产生非空结果(只需记录它,或显示为 Toast)。
检查 this 以获得对您的问题的额外帮助。
编辑
检查 this as well 以了解解决问题的其他方法。
因为你看起来像巴西人,如果你不能写你的东西,post 请在评论中使用葡萄牙语 want/need,我们会尽力提供帮助。 我会尽量简单地说,from a similar question
URL url = new URL("http://YOUR_URL.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conecc.setReadTimeout(10000);
conecc.setConnectTimeout(15000);
conecc.setRequestMethod("POST");
conecc.setRequestProperty("Accept-Charset", "UTF-8");
conecc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
conecc.setDoInput(true);
conecc.setDoOutput(true);
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(getQuery(params));
writer.flush();
writer.close();
os.close();
conecc.connect();
在同一个 class:
private String getQuery(List<NameValuePair> params) throws UnsupportedEncodingException
{
StringBuilder result = new StringBuilder();
boolean first = true;
for (NameValuePair pair : params)
{
if (first)
first = false;
else
result.append("&");
result.append(URLEncoder.encode(pair.getName(), "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(pair.getValue(), "UTF-8"));
}
return result.toString();
}