Android HTTP Post Request不起作用,但库存Java呢?

时间:2012-04-04 23:57:31

标签: java android http post request

所以我有2个代码据说可以做同样的事情。然而,我在Android上使用的那个,返回错误的HTML数据。库存Java在发送请求后返回正确的数据。我这里有两个代码。你能告诉我(即使我知道互联网允许使用Android),为什么安卓无法运行,而Java库存正在运行?这是Android代码:

编辑:我发现了修复。如果您要使用StringEntity将此类字符串发送到服务器,则必须将内容设置为application / x-www-form-urlencoded。我编辑了我的代码来显示:

public static String sendNamePostRequest(String urlString) {

    HttpClient client = new DefaultHttpClient();

    HttpPost post = new HttpPost(urlString);

    StringBuffer sb = new StringBuffer();

    try {
           StringEntity se = new StringEntity(
                "__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwULLTE3NDM5MzMwMzRkZA%3D%3D&__EVENTVALIDATION=%2FwEWBAL%2B%2B4CfBgK52%2BLYCQK1gpH7BAL0w%2FPHAQ%3D%3D&_nameTextBox=John&_zoekButton=Zoek&numberOfLettersField=3"); 

        se.setContent("application/x-www-form-urlencoded");

        post.setEntity();

        HttpResponse response = client.execute(post);
        HttpEntity entity = response.getEntity();

        BufferedReader br = new BufferedReader(new InputStreamReader(
                entity.getContent()));
        String in = "";

        while ((in = br.readLine()) != null) {
            sb.append(in + "\n");
        }

        br.close();

    } catch (Exception e) {
        e.printStackTrace();
    }

    return sb.toString();
}

这是库存Java代码:

public String sendNamePostRequest(String urlString) {

    StringBuffer sb = null;

    try {
        String data = "__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwULLTE3NDM5MzMwMzRkZA%3D%3D&__EVENTVALIDATION=%2FwEWBAL%2B%2B4CfBgK52%2BLYCQK1gpH7BAL0w%2FPHAQ%3D%3D&_nameTextBox=John&_zoekButton=Zoek&numberOfLettersField=3";

        // String data = "";

        URL requestUrl = new URL(urlString);

        HttpURLConnection conn = (HttpURLConnection) requestUrl
                .openConnection();

        conn.setDoOutput(true);
        conn.setDoInput(true);
        conn.setRequestMethod("POST");

        DataOutputStream dos = new DataOutputStream(conn.getOutputStream());

        dos.writeBytes(data);
        dos.flush();

        BufferedReader br = new BufferedReader(new InputStreamReader(
                conn.getInputStream()));

        String in = "";
        sb = new StringBuffer();

        while ((in = br.readLine()) != null) {
            sb.append(in + "\n");
        }

        dos.close();
        br.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
    return sb.toString();
}

2 个答案:

答案 0 :(得分:0)

如果数据到达服务器,您可能希望看到那里发生的事情(日志,错误,异常等)除此之外:

  • 使用可以使用HttpURLConnection,因此您可以拥有完全相同的代码
  • 对于HttpClient,不确定是否自己编码实体。使用NameValuePair设置参数,HttpClient将为您编码(正确)。

答案 1 :(得分:0)

您可以使用NameValuePair和UrlEncodedFormEntity:

List<BasicNameValuePair> nvps = new ArrayList<BasicNameValuePair>();
nvps.add(new BasicNameValuePair(KEY1, VALUE1));
nvps.add(new BasicNameValuePair(KEY2, VALUE2));
UrlEncodedFormEntity p_entity = new UrlEncodedFormEntity(nvps,HTTP.UTF_8);
post.setEntity(p_entity);