如何使用HttpUrlConnection正确执行POST?

时间:2015-12-21 19:04:17

标签: java android post httpurlconnection

我一直在寻找将数据发送到网络表单或网络服务的方法,主要是php服务器,但是对于已弃用的方法有很多答案,我必须发布单个值一个表单,另一个更精心设计的Web服务。 所以有三个问题:

  • 我想知道是否可以在表单中发布数据并提交,如果可能的话怎么做。表单不是网络服务,是用户输入的表单(this one)。
  • 如何正确使用HttpUrlConnection来调用web服务,(发布数据和获取响应),webservice可以使用JSON或简单的2字符串值,如用户和密码。

这是我发现的代码,基本上是:

private class PostTask extends AsyncTask<String, Void, Boolean> {

    @Override
    protected Boolean doInBackground(String... params) {
        HttpURLConnection conn=null;
        try {
            URL url = new URL(params[0]);
            conn = (HttpURLConnection) url.openConnection();
            conn.setDoOutput(true);
            conn.setRequestMethod("POST");
            //conn.setReadTimeout(10000);
            //conn.setConnectTimeout(15000);
            //conn.setDoInput(true);
            String body = "4";
            conn.connect();
            OutputStream output = new BufferedOutputStream(conn.getOutputStream());
            output.write(body.getBytes());
            output.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            assert conn != null;
            conn.disconnect();
        }
        return true;
    }
}

1 个答案:

答案 0 :(得分:0)

是可以使用params将表单中的数据作为网址HttpUrlConnection传递。 你几乎得到了它

  

在GET请求中,参数作为URL的一部分发送。

     

在POST请求中,参数作为请求的主体发送,   在标题之后。

做到这一点的方式:

 public void sendForm(String formParam1, String formParam2, String formParam3){
    String urlParameters  = "param1="+formParam1+"&param2="+formParam2+"&param3="+formParam3;

    try {
        byte[] postData       = urlParameters.getBytes( StandardCharsets.UTF_8 );
        int    postDataLength = postData.length;
        String request        = "http://sicenet.com.mx/ws/index.php/inicio/editar_clave";
        URL    url            = new URL( request );
        HttpURLConnection conn= (HttpURLConnection) url.openConnection();
        conn.setDoOutput( true );
        conn.setInstanceFollowRedirects( false );
        conn.setRequestMethod( "POST" );
        conn.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded");
        conn.setRequestProperty( "charset", "utf-8");
        conn.setRequestProperty( "Content-Length", Integer.toString( postDataLength ));
        conn.setUseCaches( false );

        try(DataOutputStream wr = new DataOutputStream( conn.getOutputStream())) {
            wr.write( postData );
        }

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

未经测试是否可行。

在此StackOverFlow answer

中找到