将原始格式的数据发布到PHP文件并获得响应

时间:2011-03-14 03:22:09

标签: java php android post

我正在创建一个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文件没有得到帖子数据。

1 个答案:

答案 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方面。