java直接发送http的get和post请求

java原始包net中,有支持http的get和post的请求类。直接看代码

get请求:

public class httpTest {
    public static void main(String[] args) {
        new Runs().start();
    }
     static class  Runs extends Thread{
        @Override
        public void run() {
            try {
                URL url = new URL("http://www.9k9kh5.com:8080/BigMillionaire/H52/index.html");  //创建一个网络路径对象
                URLConnection connection = url.openConnection();//打开网络路径对象中的链接。将返回一个URLConnection对象。
                InputStream is = connection.getInputStream();//获取返回对象中的输入流
                InputStreamReader isr = new InputStreamReader(is); //把流包装到字符输入流
                BufferedReader br = new BufferedReader(isr);//包装到buff中
                String line;
                StringBuilder builder = new StringBuilder(); 
                while((line = br.readLine())!=null){
                    builder.append(line);
                }
                br.close();
                isr.close();
                is.close();
                System.out.println(builder.toString());
            } catch (MalformedURLException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            } catch (IOException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
        }
    }  
}

总结:向指定路径发送了请求,并将结果封装到URLConnection对象中,通过流将内容读出。

post请求;

public class HttpPost {
    public static void main(String[] args) {
        new RunPost().start();
    }
}
class RunPost extends Thread{
    @Override
    public void run() {
        try {
            URL url = new URL("http://www.9k9kh5.com:8080/BigMillionaire/H52/index.html");
            HttpURLConnection post = (HttpURLConnection) url.openConnection();//打开链接,并返回一个post对象
            post.addRequestProperty("encoding", "utf-8");
            post.setRequestMethod("POST"); //设置链接网络的方式为post
            post.setDoInput(true);//可以从网络获取到数据。
            post.setDoOutput(true);//可以传输数据到网络        
            //输出流
            OutputStream os = post.getOutputStream();
            OutputStreamWriter sw = new OutputStreamWriter(os);
            BufferedWriter bw = new BufferedWriter(sw);
            bw.write("userId=27&sign=965435ff254fbcffee25c0d2b7e92dc8");
            bw.flush();//刷新(强制输出)
            //输入流(输入流必须要先向网络发送数据结束后才可用)
            InputStream is = post.getInputStream();
            InputStreamReader rs = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(rs);
            String line;
            StringBuilder builder =new StringBuilder();
            while((line=br.readLine())!=null){
                builder.append(line);
            }
            System.out.println(builder.toString());
            bw.close();
            sw.close();
            os.close();
            br.close();
            rs.close();
            is.close();
        } catch (MalformedURLException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        } catch (IOException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
    }
}

总结:和get不同的是请求只有路径,参数是通过输出流传输的。通过post请求返回的对象是HttpURLConnection。其他和get相似。

 

利用第三方jar包。

第三方工具(apachehttpClient

官网:hc.apache.org 

httpcomponents-client-4.5-bin.zip\httpcomponents-client-4.5\lib  (包名)

public class HttpClient {
    public static void main(String[] args) {
        new GetandPost ().start();
    }
}
class GetandPost extends Thread{
    CloseableHttpClient client = HttpClients.createDefault(); //创建出来对象
    @Override
    public void run() {
        HttpPost post = new HttpPost("http://123.59.33.252:9999/tvData");//创建post请求对象
        try {
            List<BasicNameValuePair> list= new ArrayList<BasicNameValuePair>(); //创建参数集合
            list.add(new BasicNameValuePair("TVname","27"));  //添加参数
            post.setEntity(new UrlEncodedFormEntity(list,"UTF-8"));//把参数放入请求对象,,post发送的参数list,指定格式
            CloseableHttpResponse response = client.execute(post);//启动执行请求,并获得返回值
            HttpEntity entity = response.getEntity();//得到返回的entity对象
            String result = EntityUtils.toString(entity, "UTF-8");//把实体对象转换为string
            System.out.println(result);
        } catch (UnsupportedEncodingException e1) {
            // TODO 自动生成的 catch 块
            e1.printStackTrace();
        } catch (ClientProtocolException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        } catch (IOException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
//        HttpGet get = new HttpGet("http://www.9k9kh5.com:8080/BigMillionaire/H52/gerenzhongxin.html?userId=27&sign=965435ff254fbcffee25c0d2b7e92dc8");
//        try {
//            CloseableHttpResponse response = client.execute(get);
//            HttpEntity entity = response.getEntity();//
//            String result = EntityUtils.toString(entity, "UTF-8");
//            System.out.println(result);
//        } catch (ClientProtocolException e) {
//            // TODO 自动生成的 catch 块
//            e.printStackTrace();
//        } catch (IOException e) {
//            // TODO 自动生成的 catch 块
//            e.printStackTrace();
//        }
    }
}

总结:第三方工具,少去了流的读写。总体运用简单易懂。

posted @ 2015-08-26 10:40  红色小宇宙  阅读(673)  评论(0编辑  收藏  举报