java 编写http连接,以httpclient 方式。

第一步是需要导入包:

主要有以上几个包。

第二步:编写代码如下:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.zip.GZIPInputStream;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.*;


public class http {
    
    private String con_type="UTF-8";
    
    public void basic_conf(HttpPost httpPost,HashMap<String, String> headers){  //为post 生成默认的请求头参数,但是传递的参数是:map视图格式
        httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
        httpPost.setHeader("Proxy-Connection", "keep-alive");
      //  httpPost.setHeader("Accept", "application/json, text/javascript, */*");
        //httpPost.setHeader("Accept-Encoding","gzip, deflate");
        if (headers != null) {
            for (String key : headers.keySet()) {
                httpPost.setHeader(key, headers.get(key));
            }
        }
    }

    public void basic_conf(HttpGet httpGet,HashMap<String, String> headers){ //为get请求传递默认的请求头参数
        httpGet.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
        httpGet.setHeader("Proxy-Connection", "keep-alive");
        httpGet.setHeader("Accept", "application/json, text/javascript, */*");
        //httpPost.setHeader("Accept-Encoding","gzip, deflate");
        if (headers != null) {
            for (String key : headers.keySet()) {
                httpGet.setHeader(key, headers.get(key));
            }
        }
    }

    public String content_type(String s){  //为了判断返回的响应头,contentType是否包含了别的编码要求
        String result=null;
        if(s.toLowerCase().contains("gbk")){
            result="GBK";
        }else if(s.toLowerCase().contains("utf-8")){
            result="UTF-8";
        }else if(s.toLowerCase().contains("gb2312")){
            result="GB2312";
        }else if(s.toLowerCase().contains("iso-8859-1")){
            result="ISO-8859-1";
        }
        return result;
    }

    public  String post(String url, HashMap<String, String> headers,String param) throws Exception {
        HttpPost httpPost = new HttpPost(url);
        basic_conf(httpPost,headers);
        StringEntity entity = new StringEntity(param,StandardCharsets.UTF_8);
        httpPost.setEntity(entity);
        HttpResponse httpResponse = new DefaultHttpClient().execute(httpPost); //发送请求
        int statusCode;
        statusCode = httpResponse.getStatusLine().getStatusCode(); //获取响应码
        if (statusCode == 200) { //判断请求是不是200
            HttpEntity res=httpResponse.getEntity();
            if(res.getContentType()!=null) {
                con_type = res.getContentType().getValue();  //获取响应报文头的编码格式
            }
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            httpResponse.getEntity().writeTo(out);  //将获取的报文写入数组流中
            Header gce=res.getContentEncoding();   //报文是否进行了压缩
            if(gce!=null){  //判断是不是压缩了的
                if(gce.getValue().toLowerCase().contains("gzip")) {
                    ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
                    //将响应报文写入输出流
                    try {
                        GZIPInputStream ungzip = new GZIPInputStream(in);
                        byte[] buffer = new byte[256];
                        int n;
                        while ((n = ungzip.read(buffer)) >= 0) {
                            out.write(buffer, 0, n);
                        }
                        String  gbkstr= new String(out.toByteArray(), content_type(con_type));
                        return gbkstr;
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }else{ //如果不需要压缩,直接将字节流转成字节数组,然后由字节数组根据一定的编码格式,最后生成字符串
                String  gbkstr= new String(out.toByteArray(), content_type(con_type));
                return gbkstr;
            }
        }
        return "响应码为:"+statusCode;
    }

    public  String post(String url, HashMap<String, String> headers,byte[] be) throws Exception {
        HttpPost httpPost = new HttpPost(url);
        basic_conf(httpPost,headers);
        httpPost.setEntity(new ByteArrayEntity(be));
        HttpResponse httpResponse = new DefaultHttpClient().execute(httpPost); //发送请求
        int statusCode;
        statusCode = httpResponse.getStatusLine().getStatusCode(); //获取响应码
        if (statusCode == 200) { //判断请求是不是200
            HttpEntity res=httpResponse.getEntity();
          if(res.getContentType() !=null){
             con_type = res.getContentType().getValue();  //获取响应报文头的编码格式
          }
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            httpResponse.getEntity().writeTo(out);  //将获取的报文写入数组流中
            Header gce=res.getContentEncoding();   //报文是否进行了压缩
            if(gce!=null){  //判断是不是压缩了的
                if(gce.getValue().toLowerCase().contains("gzip")) {
                    ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
                    //将响应报文写入输出流
                    try {
                        GZIPInputStream ungzip = new GZIPInputStream(in);
                        byte[] buffer = new byte[256];
                        int n;
                        while ((n = ungzip.read(buffer)) >= 0) {
                            out.write(buffer, 0, n);
                        }
                        String  gbkstr= new String(out.toByteArray(), content_type(con_type));
                        return gbkstr;
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }else{ //如果不需要压缩,直接将字节流转成字节数组,然后由字节数组根据一定的编码格式,最后生成字符串
                String  gbkstr= new String(out.toByteArray(), content_type(con_type));
                return gbkstr;
            }
        }
        
        return "响应码为:"+statusCode;
    }

    public  String post(String url,byte[] param) throws Exception {
        HttpPost httpPost = new HttpPost(url);
        basic_conf(httpPost,null);
        httpPost.setEntity(new ByteArrayEntity(param));
        HttpResponse httpResponse = new DefaultHttpClient().execute(httpPost);
        int statusCode;
        statusCode = httpResponse.getStatusLine().getStatusCode();
        if ((statusCode = httpResponse.getStatusLine().getStatusCode()) == 200) { //判断请求是不是200
            HttpEntity res=httpResponse.getEntity();
            if(res.getContentType()!=null) {
                con_type = res.getContentType().getValue();  //获取响应报文头的编码格式
            }
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            httpResponse.getEntity().writeTo(out);  //将获取的报文写入数组流中
            Header gce=res.getContentEncoding();   //报文是否进行了压缩
            if(gce!=null){  //判断是不是压缩了的
                if(gce.getValue().toLowerCase().contains("gzip")) {
                    ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
                    //将响应报文写入输出流
                    try {
                        GZIPInputStream ungzip = new GZIPInputStream(in);
                        byte[] buffer = new byte[256];
                        int n;
                        while ((n = ungzip.read(buffer)) >= 0) {
                            out.write(buffer, 0, n);
                        }
                        String  gbkstr= new String(out.toByteArray(), content_type(con_type));
                        return gbkstr;
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }else{
                String  gbkstr= new String(out.toByteArray(), content_type(con_type));
                return gbkstr;
            }
        }
        return "响应码为:"+statusCode;
    }
    
    public  String get(String url, HashMap<String, String> headers) throws Exception {
        HttpGet httpGet = new HttpGet(url);
        basic_conf(httpGet,headers);
        HttpResponse httpResponse = new DefaultHttpClient().execute(httpGet);
        int statusCode;
        statusCode = httpResponse.getStatusLine().getStatusCode();
        if ((statusCode = httpResponse.getStatusLine().getStatusCode()) == 200) { //判断请求是不是200
            HttpEntity res=httpResponse.getEntity();
            String con_type=res.getContentType().getValue();  //获取响应报文头的编码格式
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            httpResponse.getEntity().writeTo(out);  //将获取的报文写入数组流中
            Header gce=res.getContentEncoding();   //报文是否进行了压缩
            if(gce!=null){  //判断是不是压缩了的
                if(gce.getValue().toLowerCase().contains("gzip")) {
                    ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
                    //将响应报文写入输出流
                    try {
                        GZIPInputStream ungzip = new GZIPInputStream(in);
                        byte[] buffer = new byte[256];
                        int n;
                        while ((n = ungzip.read(buffer)) >= 0) {
                            out.write(buffer, 0, n);
                        }
                        String  gbkstr= new String(out.toByteArray(), content_type(con_type));
                        return gbkstr;
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }else{
                String  gbkstr= new String(out.toByteArray(), content_type(con_type));
                return gbkstr;
            }
        }
        return "响应码为:"+statusCode;
    }
    public  String get(String url) throws Exception {
        HttpGet httpGet = new HttpGet(url);
        basic_conf(httpGet,null);
        HttpResponse httpResponse = new DefaultHttpClient().execute(httpGet);
        int statusCode;
        statusCode = httpResponse.getStatusLine().getStatusCode();
        if ((statusCode = httpResponse.getStatusLine().getStatusCode()) == 200) { //判断请求是不是200
            HttpEntity res=httpResponse.getEntity();
            String con_type=res.getContentType().getValue();  //获取响应报文头的编码格式
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            httpResponse.getEntity().writeTo(out);  //将获取的报文写入数组流中
            Header gce=res.getContentEncoding();   //报文是否进行了压缩
            if(gce!=null){  //判断是不是压缩了的
                if(gce.getValue().toLowerCase().contains("gzip")) {
                    ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
                    //将响应报文写入输出流
                    try {
                        GZIPInputStream ungzip = new GZIPInputStream(in);
                        byte[] buffer = new byte[256];
                        int n;
                        while ((n = ungzip.read(buffer)) >= 0) {
                            out.write(buffer, 0, n);
                        }
                        String  gbkstr= new String(out.toByteArray(), content_type(con_type));
                        return gbkstr;
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }else{
                String  gbkstr= new String(out.toByteArray(), content_type(con_type));
                return gbkstr;
            }
        }
        return "响应码为:"+statusCode;
    }

    /**
     * @param args
     */
    public static void main(String[] args) throws UnsupportedEncodingException {

       // System.setProperty("http.proxyHost", "127.0.0.1");
       // System.setProperty("https.proxyHost", "127.0.0.1");
      //  System.setProperty("http.proxyPort", "8889");
      //  System.setProperty("https.proxyPort", "8889");
        // TODO Auto-generated method stub
        http x=new http();
        HashMap<String, String> map=new HashMap<String, String>();
       // map.put("Cookie","cod=3000.50000; JSESSIONID=B612C9CF4BE6E10A220EDE8E91D754B4; csd=50008"); //为了请求头传递参数
       // map.put("Content-Type","application/object;charset=UTF-8");
        map.put("Content-Type","application/object;charset=UTF-8");
       // map.put("Upgrade-Insecure-Requests","1");
      //  map.put("Cache-Control","max-age=0");
        String json = "{\n" +
                "  \"SYSCOD\": \"1001\",\n" +
                "  \"INSTIN\": \"AA4360520082230951\",\n" +
                "  \"SFKDAT\": \"20200822\",\n" +
                "  \"FUNDID\": \"JK950002\",\n" +
                "  \"SECCOD\": \"111710160\",\n" +
                "  \"SECMAR\": \"3\",\n" +
                "  \"BUSINE\": \"1\",\n" +
                "  \"FIRSTD\": \"4\",\n" +
                "  \"LASTDE\": \"\",\n" +
                "  \"COMNAM\": \"test\",\n" +
                "  \"ENSHKJ\": \"2000\",\n" +
                "  \"ENAMOU\": \"20000\",\n" +
                "  \"LASTDA\": \"\",\n" +
                "  \"BUSTYP\": \"1004\",\n" +
                "  \"ZQTZFL\": \"\",\n" +
                "  \"CJONBR\": \"TG2008220008252367\",\n" +
                "  \"QTCONT\": \"20200822\"\n" +
                "}";
        String param = "0281VLMONJSON   JSON  " +("0000000000000000000"+json.length()).substring(String.valueOf(json.length()).length()) +    "VL$BSVRHEAD$RQTYPE000000000000000000";
        try {
            byte[] bytes=param.getBytes(StandardCharsets.UTF_8);
            //这个是为了拼接byte[]
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
         
            bos.write(bytes);
            String xx;
            System.out.println("发送的数据是:"+new String ( bos.toByteArray(),StandardCharsets.UTF_8));
            //改为发送byte[]。避免了转码问题,
            xx = x.post("http://monconfig.paas.cmbchina.cn/tbmonitor/ccsPacket/MONSQRES",map, bos.toByteArray());
            //如果需要用到jmeter中,那么就需要将byte[] 转为字符串就行,注意编码格式就行。
           xx = x.post("http:/XXXXXX/tbmonitor/ccsPacket/MONSQRES", map, new String(bos.toByteArray(), "utf-8"));
            
            System.out.println("返回结果:"+xx);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    
}

 

 下面对一种特殊的传递格式进行讲解一下:

加入我将要传递的是一个文件,或者说,请求是以:multipart/form-data 方式。我们对请求报文的编写格式必须如下面的param变量。针对这种请求体,建议直接使用jmeter,来的更容易。当然测试时还有一种方式:跳过这个步骤。

public static void main(String[] args) {
        
        System.setProperty("http.proxyHost", "127.0.0.1"); //这个是为了将http请求通过fiddler进行监控起来
         System.setProperty("https.proxyHost", "127.0.0.1");
         System.setProperty("http.proxyPort", "8889");
         System.setProperty("https.proxyPort", "8889");
        // TODO Auto-generated method stub
        B x=new B();
        HashMap<String, String> map=new HashMap<String, String>();
        map.put("Cookie","cod=3000.50000; JSESSIONID=B612C9CF4BE6E10A220EDE8E91D754B4; csd=50008");
        map.put("Content-Type","multipart/form-data; boundary=----WebKitFormBoundaryx43rZoh62YQipnV1");
        map.put("Upgrade-Insecure-Requests","1");
        map.put("Cache-Control","max-age=0");
        //String j="platform_code=&charge_status=&mian_body=&charge_channel_code=&push_flag=&send_flag=&update_flag=&operate_name=&createTimeStart=2018-11-23&createTimeEnd=2018-11-30&updateTimeStart=&updateTimeEnd=&charge_type=1&single_no=&id_card=&bank_no=&loan_no=&currentPage=1&limit=10";
        String param="------WebKitFormBoundaryx43rZoh62YQipnV1"+"\r\n"
        +"Content-Disposition: form-data; name=\"org.apache.struts.taglib.html.TOKEN\""+"\r\n"
        +"\r\n"
        +"f996182ad68010c19ca47b58e09ec60e"+"\r\n"
        +"------WebKitFormBoundaryx43rZoh62YQipnV1"+"\r\n"
        +"Content-Disposition: form-data; name=\"org.apache.struts.taglib.html.TOKEN\""+"\r\n"
        +"\r\n"
        +"f996182ad68010c19ca47b58e09ec60e"+"\r\n"
        +"------WebKitFormBoundaryx43rZoh62YQipnV1"+"\r\n"
        +"Content-Disposition: form-data; name=\"loanContractNo\""+"\r\n"
        +"\r\n"
        +"\r\n"
        +"------WebKitFormBoundaryx43rZoh62YQipnV1"+"\r\n"
        +"Content-Disposition: form-data; name=\"loanName\""+"\r\n"
        +"\r\n"
        +"\r\n"
        +"------WebKitFormBoundaryx43rZoh62YQipnV1"+"\r\n"
        +"Content-Disposition: form-data; name=\"mainBody\""+"\r\n"
        +"\r\n"
        +"ZH"+"\r\n"
        +"------WebKitFormBoundaryx43rZoh62YQipnV1"+"\r\n"
        +"Content-Disposition: form-data; name=\"areaNo\""+"\r\n"
        +"\r\n"
        +"\r\n"
        +"------WebKitFormBoundaryx43rZoh62YQipnV1"+"\r\n"
        +"Content-Disposition: form-data; name=\"signAreaNo\""+"\r\n"
        +"\r\n"
        +"\r\n"
        +"------WebKitFormBoundaryx43rZoh62YQipnV1"+"v\n"
        +"Content-Disposition: form-data; name=\"newAreaNo\""+"\r\n"
        +"\r\n"
        +"\r\n"
        +"------WebKitFormBoundaryx43rZoh62YQipnV1"+"\r\n"
        +"Content-Disposition: form-data; name=\"monthPayDate\""+"\r\n"
        +"\r\n"
        +"\r\n"
        +"------WebKitFormBoundaryx43rZoh62YQipnV1"+"\r\n"
        +"Content-Disposition: form-data; name=\"productType\""+"\r\n"
        +"\r\n"              
        +"\r\n"
        +"------WebKitFormBoundaryx43rZoh62YQipnV1"+"\r\n"
        +"Content-Disposition: form-data; name=\"perPageCount\""+"\r\n"
        +"\r\n"
        +"15"+"\r\n"
        +"------WebKitFormBoundaryx43rZoh62YQipnV1"+"\r\n"
        +"Content-Disposition: form-data; name=\"turntovalue\""+"\r\n"
        +"\r\n"
        +"\r\n"
        +"------WebKitFormBoundaryx43rZoh62YQipnV1"+"\r\n"
        +"Content-Disposition: form-data; name=\"pageTurn\""+"\r\n"
        +"\r\n"
        +"YES"+"\r\n"
        +"------WebKitFormBoundaryx43rZoh62YQipnV1"+"\r\n"
        +"Content-Disposition: form-data; name=\"currPage\""+"\r\n"
        +"\r\n"      
        +"1"+"\r\n"
        +"------WebKitFormBoundaryx43rZoh62YQipnV1"+"\r\n"
        +"Content-Disposition: form-data; name=\"method\""+"\r\n"
        +"\r\n"
        +"queryP2pPaymentAppointmentInfo"+"\r\n"
        +"------WebKitFormBoundaryx43rZoh62YQipnV1"+"\r\n"
        +"Content-Disposition: form-data; name=\"selectlist\""+"\r\n"
        +"\r\n"
        +"#"+"\r\n"
        +"------WebKitFormBoundaryx43rZoh62YQipnV1"+"\r\n"
        +"Content-Disposition: form-data; name=\"drFileType\""+"\r\n"
        +"\r\n"
        +"\r\n"
        +"------WebKitFormBoundaryx43rZoh62YQipnV1"+"\r\n"
        +"Content-Disposition: form-data; name=\"uploadFile\"; filename=\"\""+"\r\n"
        +"Content-Type: application/octet-stream"+"\r\n"
        +"\r\n"
        +"\r\n"
        +"------WebKitFormBoundaryx43rZoh62YQipnV1"+"\r\n"
        +"Content-Disposition: form-data; name=\"dcFileType\""+"\r\n"
        +"\r\n"
        +"\r\n"
        +"------WebKitFormBoundaryx43rZoh62YQipnV1--"+"\r\n";
        
        try {
            String xx=x.post("http://sit1-credit.zhph.lan/p2pPaymentAppointmentAction.do",map,param);
            System.out.println(xx);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

 

posted on 2018-12-03 11:40  进_进  阅读(2380)  评论(0)    收藏  举报