HttpUrlConnection以GET方式和POST方式请求服务器

1:GET方式。这种方式比较简单,直接在URL后面加上参数即可

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;


public class HttpUrlCon {

    public static void main(String[] args) { 
        try {

            URL url = new URL("http://localhost:8080/myhome/mypage/JasonTest.do?userName=liufukin");
            HttpURLConnection  httpConn = (HttpURLConnection) url.openConnection();

            // //设置连接属性   
            httpConn.setRequestMethod("GET");// 设置URL请求方法,默认为“GET”
            httpConn.setDoOutput(false);// 禁止 URL 连接进行输出,默认为“false”   
            httpConn.setDoInput(true);// 使用 URL 连接进行输入,默认为“true”   
            httpConn.setUseCaches(false);// 忽略缓存   
            // 设置 《请求头》信息 
            httpConn.setRequestProperty("accept", "*/*");  
            httpConn.setRequestProperty("Content-Type", "application/octet-stream"); //设置的文本类型,此字段必须和和服务器端处理请求流的编码一致,否则无法解析
            httpConn.setRequestProperty("Connection", "Keep-Alive");// 维持长连接   
            httpConn.setRequestProperty("Charset", "UTF-8");
            httpConn.setRequestProperty("BrokerID", URLEncoder.encode("MFTST0", "utf-8"));   

            // 前面的操作只是将“请求头”和“正文”组装成request对象,最后真正以HTTP协议发送数据的是下面的getInputStream();
            BufferedReader responseReader = new BufferedReader(new InputStreamReader(httpConn.getInputStream(), "UTF-8"));   
            System.out.println(responseReader.readLine());

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

2:POST请求。其实和GET差不多,只是他的参数部分需要以“字符流”的形式处理,在和之前的“请求头”部分信息组装成request对象在发送过去。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;


public class HttpUrlCon {

    public static void main(String[] args) { 
        try {

            URL url = new URL("http://localhost:8080/myhome/mypage/JasonTest.do");
            HttpURLConnection  httpConn = (HttpURLConnection) url.openConnection();

            // //设置连接属性   
            httpConn.setRequestMethod("POST");// 设置URL请求方法,默认为“GET”
            httpConn.setDoOutput(true);// 使用 URL 连接进行输出,默认为“false”
            httpConn.setDoInput(true);// 使用 URL 连接进行输入,默认为“true”            httpConn.setUseCaches(false);// 忽略缓存   

            // 设置 《请求头》信息 
            httpConn.setRequestProperty("accept", "*/*");  
            httpConn.setRequestProperty("Content-Type", "application/octet-stream"); //设置的文本类型,此字段必须和和服务器端处理请求流的编码一致,否则无法解析 
            httpConn.setRequestProperty("Connection", "Keep-Alive");// 维持长连接   
            httpConn.setRequestProperty("Charset", "UTF-8");
            httpConn.setRequestProperty("BrokerID", URLEncoder.encode("MFTST0", "utf-8"));   

            //发送正文context;其实并非发送,而是将其存储在缓存中,最后和前面设置的“请求头”组装成request对象
            ObjectOutputStream objOutputStrm = new ObjectOutputStream(httpConn.getOutputStream()); 
            objOutputStrm.writeObject("userName=liufu & pwd=815325"); // 这里发送一个空数据 
            objOutputStrm.flush(); 
            objOutputStrm.close(); 

            // 前面的操作只是将“请求头”和“正文”组装成request对象,最后真正以HTTP协议发送数据的是下面的getInputStream();
            BufferedReader responseReader = new BufferedReader(new InputStreamReader(httpConn.getInputStream(), "UTF-8"));   
            System.out.println(responseReader.readLine());

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

由于经常需要对创建和封装HTTP请求,所以可以把它们整合起来,调用即可产生httpurlconnection对象。

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;


public class HttpUrlCon {

//  URL url = new URL("http://192.168.7.127:3000/system/brokers?langCode=zh_CN&ordChnl=M");
//  URL url = new URL("http://192.168.7.130:8080/loadrunnerServer/mypage/dologin.do");
//  URL url = new URL("http://192.168.7.127:3000/clients/026200000/session");

    static HashMap<String, String> commonHashmap = new HashMap<String, String>();
    public static void main(String[] args) { 
        HashMap<String, String> hashMapHead = new HashMap<String, String>();//包含“请求头”的信息
        hashMapHead.put("Content-Type", "application/x-www-form-urlencoded");
        hashMapHead.put("Charset", "UTF-8");
        hashMapHead.put("Connection", "Keep-Alive");
        hashMapHead.put("BrokerID", "MFTST0");

        HashMap<String, String> hashMapBody = new HashMap<String, String>();//包含“请求正文(body)”的信息
        hashMapBody.put("password", "123456789");
        hashMapBody.put("ordChnl", "M");

        String urlString = "http://192.168.7.127:3000/clients/026200000/session";
        HttpUrlCon httpUrlCon = new HttpUrlCon();
        HttpURLConnection httpURLConn = httpUrlCon.createPOSTHttpconn(urlString, hashMapHead, hashMapBody);
        if(httpURLConn != null){
            BufferedReader bufferedReader = null;
            try {
                if(HttpURLConnection.HTTP_OK == httpURLConn.getResponseCode()){
                    bufferedReader = new BufferedReader(new InputStreamReader(httpURLConn.getInputStream(),"UTF-8"));
                    if(bufferedReader.readLine().contains("\"status\":\"S\"")){
                        commonHashmap.put("authorization", httpURLConn.getHeaderField("authorization"));
                        httpUrlCon.getOrders();
                    }
                }
            }catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }   

    public void getOrders(){
        HashMap<String, String> hashMapHead = new HashMap<String, String>();//包含“请求头”的信息
        hashMapHead.put("Charset", "UTF-8");
        hashMapHead.put("authorization", commonHashmap.get("authorization"));
        hashMapHead.put("BrokerID", "MFTST0");

        HashMap<String, String> hashMapBody = new HashMap<String, String>();//包含“请求正文(body)”的信息
        hashMapBody.put("from", "2012-01-31Z");

        String urlString = "http://192.168.7.127:3000/accounts/0262000001011/orders";
        HttpURLConnection httpURLConn = new HttpUrlCon().createGetHttpConn(urlString, hashMapHead, hashMapBody);
        if(httpURLConn != null){
            BufferedReader bufferedReader = null;
            try {
                if(HttpURLConnection.HTTP_OK == httpURLConn.getResponseCode()){
                    bufferedReader = new BufferedReader(new InputStreamReader(httpURLConn.getInputStream(),"UTF-8"));
                    System.out.println(bufferedReader.readLine());
                }
            }catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }


    public HttpURLConnection createGetHttpConn(String urlString, HashMap<String, String> hashMapHead, HashMap<String, String> hashMapBody){
        HttpURLConnection  httpConn = null;
        //根据hashMapBody组装需要传给后台的参数,只是以GET的形式发送的话,把他放在URL后面即可
        StringBuffer paramStr = new StringBuffer();
        if(hashMapBody != null){
            Iterator<Map.Entry<String, String>> iterator = hashMapBody.entrySet().iterator();
            while(iterator.hasNext()){
                Map.Entry<String, String> entry = iterator.next();
                paramStr.append(entry.getKey()+ "=" + entry.getValue() + "&");
            }
            if(!paramStr.toString().trim().equals("")){
                paramStr.deleteCharAt(paramStr.length()-1);
                urlString += "?" + paramStr;
            }
        }
        try {
            URL url = new URL(urlString);
            httpConn = (HttpURLConnection) url.openConnection();
            // 根据hashMapHead组装《请求头》信息
            if(hashMapHead != null){
                Iterator<Map.Entry<String, String>> iterator = hashMapHead.entrySet().iterator();
                while(iterator.hasNext()){
                    Map.Entry<String, String> entry = iterator.next();
                    httpConn.setRequestProperty(entry.getKey(), entry.getValue());
                }
            }
            return httpConn;
        }catch (Exception ex) {   
            ex.printStackTrace();  
            return null;
        }
    }


    public HttpURLConnection createPOSTHttpconn(String urlString, HashMap<String, String> hashMapHead, HashMap<String, String> hashMapBody){
        HttpURLConnection  httpConn = null;
        //根据hashMapBody拼接需要发送给后台的正文(body),这个是post形式发送,所以得要用outputstream来发送。
        StringBuffer paramStr = new StringBuffer();
        if(hashMapBody != null){
            Iterator<Map.Entry<String, String>> iterator = hashMapBody.entrySet().iterator();
            while(iterator.hasNext()){
                Map.Entry<String, String> entry = iterator.next();
                paramStr.append(entry.getKey() + "=" + entry.getValue() + "&");
            }
            if(!paramStr.toString().trim().equals("")){
                paramStr.deleteCharAt(paramStr.length()-1);
            }
        }
        try {
            URL url = new URL(urlString);
            httpConn = (HttpURLConnection) url.openConnection();
            // 设置连接属性   
            httpConn.setDoOutput(true);// 使用 URL 连接进行输出   ,默认为false
            httpConn.setDoInput(true);// 使用 URL 连接进行输入   ,默认为true
            httpConn.setUseCaches(false);// 忽略缓存   
            httpConn.setRequestMethod("POST");// 设置URL请求方法   
            // 根据hashMapHead组装《请求头》信息
            if(hashMapHead != null){
                Iterator<Map.Entry<String, String>> iterator = hashMapHead.entrySet().iterator();
                while(iterator.hasNext()){
                    Map.Entry<String, String> entry = iterator.next();
                    httpConn.setRequestProperty(entry.getKey(), entry.getValue());
                }
            }
            //设置业务逻辑需要传送过去的字段
            DataOutputStream out = new DataOutputStream(httpConn.getOutputStream());
            out.writeBytes(paramStr.toString());
            out.flush();
            out.close(); 
            return httpConn;
        }catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }   
    }
}

总结:GET和post主要的差别是一个在URL后面接参数,而另一个是以正文内容的形式发送给服务器端。特别要注意的是:以post方式发起请求的时候,那个“请求头”的hashMapHead.put(“Content-Type”, “application/x-www-form-urlencoded”);一定要和后台服务器的匹配上才行,否则传过去给服务器的参数无法被解析出来,会发现为null。(注意啊!!!)

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值