Http学习之应用HttpURLConnection发送post和get请求

Http学习之使用HttpURLConnection发送post和get请求

最常用的Http请求无非是get和post,get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet,post与get的不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内。
在Java中可以使用HttpURLConnection发起这两种请求,了解此类,对于了解soap,和编写servlet的自动测试代码都有很大的帮助。
下面的代码简单描述了如何使用HttpURLConnection发起这两种请求,以及传递参数的方法:

Http学习之应用HttpURLConnection发送post和get请求public   class  HttpInvoker  {
Http学习之应用HttpURLConnection发送post和get请求
Http学习之应用HttpURLConnection发送post和get请求    public static final String GET_URL = "http://localhost:8080/welcome1";
Http学习之应用HttpURLConnection发送post和get请求
Http学习之应用HttpURLConnection发送post和get请求    public static final String POST_URL = "http://localhost:8080/welcome1";
Http学习之应用HttpURLConnection发送post和get请求
Http学习之应用HttpURLConnection发送post和get请求    public static void readContentFromGet() throws IOException {
Http学习之应用HttpURLConnection发送post和get请求        // 拼凑get请求的URL字串,使用URLEncoder.encode对特殊和不可见字符进行编码
Http学习之应用HttpURLConnection发送post和get请求        String getURL = GET_URL + "?username="
Http学习之应用HttpURLConnection发送post和get请求                + URLEncoder.encode("fat man", "utf-8");
Http学习之应用HttpURLConnection发送post和get请求        URL getUrl = new URL(getURL);
Http学习之应用HttpURLConnection发送post和get请求        // 根据拼凑的URL,打开连接,URL.openConnection函数会根据URL的类型,
Http学习之应用HttpURLConnection发送post和get请求        // 返回不同的URLConnection子类的对象,这里URL是一个http,因此实际返回的是HttpURLConnection
Http学习之应用HttpURLConnection发送post和get请求        HttpURLConnection connection = (HttpURLConnection) getUrl
Http学习之应用HttpURLConnection发送post和get请求                .openConnection();
Http学习之应用HttpURLConnection发送post和get请求        // 进行连接,但是实际上get request要在下一句的connection.getInputStream()函数中才会真正发到
Http学习之应用HttpURLConnection发送post和get请求        // 服务器
Http学习之应用HttpURLConnection发送post和get请求        connection.connect();
Http学习之应用HttpURLConnection发送post和get请求        // 取得输入流,并使用Reader读取
Http学习之应用HttpURLConnection发送post和get请求        BufferedReader reader = new BufferedReader(new InputStreamReader(
Http学习之应用HttpURLConnection发送post和get请求                connection.getInputStream()));
Http学习之应用HttpURLConnection发送post和get请求        System.out.println("=============================");
Http学习之应用HttpURLConnection发送post和get请求        System.out.println("Contents of get request");
Http学习之应用HttpURLConnection发送post和get请求        System.out.println("=============================");
Http学习之应用HttpURLConnection发送post和get请求        String lines;
Http学习之应用HttpURLConnection发送post和get请求        while ((lines = reader.readLine()) != null) {
Http学习之应用HttpURLConnection发送post和get请求            System.out.println(lines);
Http学习之应用HttpURLConnection发送post和get请求        }
Http学习之应用HttpURLConnection发送post和get请求        reader.close();
Http学习之应用HttpURLConnection发送post和get请求        // 断开连接
Http学习之应用HttpURLConnection发送post和get请求        connection.disconnect();
Http学习之应用HttpURLConnection发送post和get请求        System.out.println("=============================");
Http学习之应用HttpURLConnection发送post和get请求        System.out.println("Contents of get request ends");
Http学习之应用HttpURLConnection发送post和get请求        System.out.println("=============================");
Http学习之应用HttpURLConnection发送post和get请求    }
Http学习之应用HttpURLConnection发送post和get请求
Http学习之应用HttpURLConnection发送post和get请求    public static void readContentFromPost() throws IOException {
Http学习之应用HttpURLConnection发送post和get请求        // Post请求的url,与get不同的是不需要带参数
Http学习之应用HttpURLConnection发送post和get请求        URL postUrl = new URL(POST_URL);
Http学习之应用HttpURLConnection发送post和get请求        // 打开连接
Http学习之应用HttpURLConnection发送post和get请求        HttpURLConnection connection = (HttpURLConnection) postUrl
Http学习之应用HttpURLConnection发送post和get请求                .openConnection();
Http学习之应用HttpURLConnection发送post和get请求        // Output to the connection. Default is
Http学习之应用HttpURLConnection发送post和get请求        // false, set to true because post
Http学习之应用HttpURLConnection发送post和get请求        // method must write something to the
Http学习之应用HttpURLConnection发送post和get请求        // connection
Http学习之应用HttpURLConnection发送post和get请求        // 设置是否向connection输出,因为这个是post请求,参数要放在
Http学习之应用HttpURLConnection发送post和get请求        // http正文内,因此需要设为true
Http学习之应用HttpURLConnection发送post和get请求        connection.setDoOutput(true);
Http学习之应用HttpURLConnection发送post和get请求        // Read from the connection. Default is true.
Http学习之应用HttpURLConnection发送post和get请求        connection.setDoInput(true);
Http学习之应用HttpURLConnection发送post和get请求        // Set the post method. Default is GET
Http学习之应用HttpURLConnection发送post和get请求        connection.setRequestMethod("POST");
Http学习之应用HttpURLConnection发送post和get请求        // Post cannot use caches
Http学习之应用HttpURLConnection发送post和get请求        // Post 请求不能使用缓存
Http学习之应用HttpURLConnection发送post和get请求        connection.setUseCaches(false);
Http学习之应用HttpURLConnection发送post和get请求        // This method takes effects to
Http学习之应用HttpURLConnection发送post和get请求        // every instances of this class.
Http学习之应用HttpURLConnection发送post和get请求        // URLConnection.setFollowRedirects是static函数,作用于所有的URLConnection对象。
Http学习之应用HttpURLConnection发送post和get请求        // connection.setFollowRedirects(true);
Http学习之应用HttpURLConnection发送post和get请求
Http学习之应用HttpURLConnection发送post和get请求        // This methods only
Http学习之应用HttpURLConnection发送post和get请求        // takes effacts to this
Http学习之应用HttpURLConnection发送post和get请求        // instance.
Http学习之应用HttpURLConnection发送post和get请求        // URLConnection.setInstanceFollowRedirects是成员函数,仅作用于当前函数
Http学习之应用HttpURLConnection发送post和get请求        connection.setInstanceFollowRedirects(true);
Http学习之应用HttpURLConnection发送post和get请求        // Set the content type to urlencoded,
Http学习之应用HttpURLConnection发送post和get请求        // because we will write
Http学习之应用HttpURLConnection发送post和get请求        // some URL-encoded content to the
Http学习之应用HttpURLConnection发送post和get请求        // connection. Settings above must be set before connect!
Http学习之应用HttpURLConnection发送post和get请求        // 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的
Http学习之应用HttpURLConnection发送post和get请求        // 意思是正文是urlencoded编码过的form参数,下面我们可以看到我们对正文内容使用URLEncoder.encode
Http学习之应用HttpURLConnection发送post和get请求        // 进行编码
Http学习之应用HttpURLConnection发送post和get请求        connection.setRequestProperty("Content-Type",
Http学习之应用HttpURLConnection发送post和get请求                "application/x-www-form-urlencoded");
Http学习之应用HttpURLConnection发送post和get请求        // 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成,
Http学习之应用HttpURLConnection发送post和get请求        // 要注意的是connection.getOutputStream会隐含的进行connect。
Http学习之应用HttpURLConnection发送post和get请求        connection.connect();
Http学习之应用HttpURLConnection发送post和get请求        DataOutputStream out = new DataOutputStream(connection
Http学习之应用HttpURLConnection发送post和get请求                .getOutputStream());
Http学习之应用HttpURLConnection发送post和get请求        // The URL-encoded contend
Http学习之应用HttpURLConnection发送post和get请求        // 正文,正文内容其实跟get的URL中'?'后的参数字符串一致
Http学习之应用HttpURLConnection发送post和get请求        String content = "firstname=" + URLEncoder.encode("一个大肥人", "utf-8");
Http学习之应用HttpURLConnection发送post和get请求        // DataOutputStream.writeBytes将字符串中的16位的unicode字符以8位的字符形式写道流里面
Http学习之应用HttpURLConnection发送post和get请求        out.writeBytes(content); 
Http学习之应用HttpURLConnection发送post和get请求
Http学习之应用HttpURLConnection发送post和get请求        out.flush();
Http学习之应用HttpURLConnection发送post和get请求        out.close(); // flush and close
Http学习之应用HttpURLConnection发送post和get请求        BufferedReader reader = new BufferedReader(new InputStreamReader(
Http学习之应用HttpURLConnection发送post和get请求                connection.getInputStream()));
Http学习之应用HttpURLConnection发送post和get请求        String line;
Http学习之应用HttpURLConnection发送post和get请求        System.out.println("=============================");
Http学习之应用HttpURLConnection发送post和get请求        System.out.println("Contents of post request");
Http学习之应用HttpURLConnection发送post和get请求        System.out.println("=============================");
Http学习之应用HttpURLConnection发送post和get请求        while ((line = reader.readLine()) != null) {
Http学习之应用HttpURLConnection发送post和get请求            System.out.println(line);
Http学习之应用HttpURLConnection发送post和get请求        }
Http学习之应用HttpURLConnection发送post和get请求        System.out.println("=============================");
Http学习之应用HttpURLConnection发送post和get请求        System.out.println("Contents of post request ends");
Http学习之应用HttpURLConnection发送post和get请求        System.out.println("=============================");
Http学习之应用HttpURLConnection发送post和get请求        reader.close();
Http学习之应用HttpURLConnection发送post和get请求        connection.disconnect();
Http学习之应用HttpURLConnection发送post和get请求    }
Http学习之应用HttpURLConnection发送post和get请求
Http学习之应用HttpURLConnection发送post和get请求    /**
Http学习之应用HttpURLConnection发送post和get请求     * @param args
Http学习之应用HttpURLConnection发送post和get请求     */
Http学习之应用HttpURLConnection发送post和get请求    public static void main(String[] args) {
Http学习之应用HttpURLConnection发送post和get请求        // TODO Auto-generated method stub
Http学习之应用HttpURLConnection发送post和get请求        try {
Http学习之应用HttpURLConnection发送post和get请求            readContentFromGet();
Http学习之应用HttpURLConnection发送post和get请求            readContentFromPost();
Http学习之应用HttpURLConnection发送post和get请求        } catch (IOException e) {
Http学习之应用HttpURLConnection发送post和get请求            // TODO Auto-generated catch block
Http学习之应用HttpURLConnection发送post和get请求            e.printStackTrace();
Http学习之应用HttpURLConnection发送post和get请求        }
Http学习之应用HttpURLConnection发送post和get请求    }
Http学习之应用HttpURLConnection发送post和get请求
Http学习之应用HttpURLConnection发送post和get请求}

 

 

转自:http://toughpatient5.diandian.com/post/2011-07-06/19241336

http://java.chinaitlab.com/net/831820.html

http://dusiguxia.blog.163.com/blog/static/5562931620119193430501/

http://androidyo.iteye.com/blog/624015