我正在创建一个Android应用程序,我需要使用post数据将从数据收集的一些数据发送到服务器php文件,并从php文件中获取回显文本并显示它。我有这种格式的帖子变量 - > “name = xyz& home = xyz”等等。我使用以下类发布,但服务器上的php文件没有获得post vars。有人可以告诉我什么是错的或任何其他方式来做我想做的事情?
package xxx.xxx.xxx;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class NetUtil {
public static String UrlToString(String targetURL, String urlParameters)
{
URL url;
HttpURLConnection connection = null;
try {
//Create connection
url = new URL(targetURL);
connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
connection.setRequestProperty("Content-Length", "" +
Integer.toString(urlParameters.getBytes().length));
connection.setRequestProperty("Content-Language", "en-US");
connection.setUseCaches (false);
connection.setDoInput(true);
connection.setDoOutput(true);
//Send request
DataOutputStream wr = new DataOutputStream (
connection.getOutputStream ());
wr.write(urlParameters.getBytes("UTF-8"));
wr.flush ();
//Get Response
InputStream is = connection.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
String line;
StringBuffer response = new StringBuffer();
while((line = rd.readLine()) != null) {
response.append(line);
response.append('\r');
}
rd.close();
return response.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if(connection != null) {
connection.disconnect();
}
}
}
}
我从php文件得到回复,但php文件没有得到帖子数据。
答案 0 :(得分:0)
对于初学者来说,这个例子对我来说没什么问题。只有以下内容出现:
connection.setRequestProperty("Content-Length", "" +
Integer.toString(urlParameters.getBytes().length));
和
wr.write(urlParameters.getBytes("UTF-8"));
首先,您使用平台默认编码将字符转换为字节。生成的长度不一定与使用UTF-8编码将字符转换为字节时相同,就像编写请求主体时一样。因此,Content-Length
标题与实际内容长度相关的可能性存在。要解决此问题,您应该在两个调用上使用相同的字符集。
但我相信在解析请求体时,PHP并不是 严格的,所以在PHP端你什么也得不到。可能urlParameters
的格式不正确。它们真的是URL编码的吗?
无论如何,您是否使用Android的内置HttpClient API进行了尝试?它应该如下简单:
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(targetURL);
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("name", "xyz"));
params.add(new BasicNameValuePair("home", "xyz"));
post.setEntity(new UrlEncodedFormEntity(params));
HttpResponse response = client.execute(post);
InputStream input = response.getEntity().getContent();
// ...
如果这种方法不起作用,那么错误可能出在PHP方面。