zoukankan      html  css  js  c++  java
  • Java java httpclient4.5 进行http,https通过SSL安全验证跳过,封装接口请求 get,post(formdata,json)封装,文件上传下载

    package api;
    
    import java.util.*;
    import java.net.URI;
    import org.apache.http.Consts;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.*;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.entity.mime.content.FileBody;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.protocol.HTTP;
    import org.apache.http.util.EntityUtils;
    import java.io.IOException;
    import net.sf.json.JSONObject;
    import org.apache.log4j.Logger;
    import com.sun.org.apache.xml.internal.resolver.helpers.PublicId;
    import com.sun.xml.internal.stream.Entity;
    
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.ssl.SSLContexts;
    import org.apache.http.ssl.TrustStrategy;
    import java.security.cert.CertificateException;
    import java.security.cert.X509Certificate;
    import javax.net.ssl.SSLContext;
    import org.apache.http.conn.ssl.NoopHostnameVerifier;
    import java.io.*;
    import java.io.File;  
    import org.apache.http.entity.mime.MultipartEntityBuilder;
    
    public class TestHttpClient {
    	static HttpPost post;
    	static HttpResponse response;
    	static HttpGet get;
    	static HttpEntity entity;
    //	private static Logger logger = Logger.getLogger(TestHttpClient.class);
    	 
    	
    	//ssl安全跳过
    	public static CloseableHttpClient getignoreSSLClient() {
    		CloseableHttpClient client =null;
    		try {
    			SSLContext sslContext=SSLContexts.custom().loadTrustMaterial(null, new TrustStrategy() {
    				
    				@Override
    				public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
    					return true;
    				}
    			}).build();
    			client=HttpClients.custom().setSSLContext(sslContext).setSSLHostnameVerifier(new NoopHostnameVerifier()).build();
    			
    		}catch(Exception e) {
    			e.printStackTrace();
    		}
    		return client;
    	}
    	
    	//
    	public static String getrequest(String url,Map<Object, Object> parameters,Map<Object,Object> headers){
    		String basicUrl=url;
    		String result=null;
    		String urlencoded=null;
    //		CloseableHttpClient httpclient=HttpClients.createDefault();
    		CloseableHttpClient httpclient=getignoreSSLClient();
    		List<NameValuePair> formData=new ArrayList<NameValuePair>();
    		
    		try {
    			//参数分离
    			if(!url.contains("=")) {
    				if(parameters !=null && parameters.size()>0) {
    					for(Map.Entry<Object,Object> entry:parameters.entrySet()) {
    						String k =entry.getKey().toString();
    						String v=entry.getValue().toString();
    						formData.add(new BasicNameValuePair(k, v));	
    					}
    				}
    				urlencoded =EntityUtils.toString(new UrlEncodedFormEntity(formData, Consts.UTF_8));
    				if(basicUrl.contains("?")) {
    					
    					get=new HttpGet(basicUrl+urlencoded);
    					if(headers !=null && headers.size()>0) {
    						for(Map.Entry<Object, Object> entry:headers.entrySet()) {
    							get.setHeader(entry.getKey().toString(),entry.getValue().toString());
    						}
    					}else {
    						get.setHeader(null);
    					}
    					response=httpclient.execute(get);
    					entity=response.getEntity();
    					result=EntityUtils.toString(entity,"UTF-8");
    					return result;
    				}else {
    					//无?
    					get=new HttpGet(basicUrl+"?"+urlencoded);
    					if(headers !=null && headers.size()>0) {
    						for(Map.Entry<Object, Object> entry:headers.entrySet()) {
    							get.setHeader(entry.getKey().toString(),entry.getValue().toString());
    						}
    					}else {
    						get.setHeader(null);
    					}
    					response=httpclient.execute(get);
    					entity=response.getEntity();
    					result=EntityUtils.toString(entity,"UTF-8");
    					return result;
    				}	
    			}else {
    				
    				//纯url
    				get=new HttpGet(basicUrl);
    				response=httpclient.execute(get);
    				entity=response.getEntity();
    				result=EntityUtils.toString(entity,"UTF-8");
    				return result;
    			}			
    		}catch (IOException e) {
    			e.printStackTrace();
    		}finally {
    			try {
    				if(httpclient!=null) {
    					httpclient.close();
    				}
    			}catch(IOException e) {
    			e.printStackTrace();
    			}
    		}
    		return result;
    	}
    	
    	//postformData
    	public static String postformData(String url,Map<Object, Object> body,Map<Object, Object> headers){
    		String basicUrl=url;
    		String result=null;
    
    		CloseableHttpClient httpclient=getignoreSSLClient();
    		List<NameValuePair> formData=new ArrayList<NameValuePair>();
    		try {	
    			   post =new HttpPost();
    			   post.setURI(new URI(basicUrl));
    			   //上面可以直接用post = new HttpPost(url)代替
    	           for (Iterator iter = body.keySet().iterator(); iter.hasNext();) {
    	    			String k = (String) iter.next();
    	    			String v = String.valueOf(body.get(k));
    	    			formData.add(new BasicNameValuePair(k, v));
    	    			System.out.println("构造参数完毕");
    	    		}
    				if(headers !=null && headers.size()>0) {
    					for(Map.Entry<Object, Object> entry:headers.entrySet()) {
    						post.setHeader(entry.getKey().toString(),entry.getValue().toString());
    					}
    				}else {
    					post.setHeader(null);
    					//header设置完毕
    				}
    				post.setEntity(new UrlEncodedFormEntity(formData,Consts.UTF_8));
    	            response = httpclient.execute(post);
    	            entity  =response.getEntity();
    	            result=EntityUtils.toString(entity, "UTF-8");
    	            int errorCode= response.getStatusLine().getStatusCode();
    	            if(String.valueOf(errorCode)!=null) {
    	            		return result;
    	            }else {
    	            	result=null;
    	            	return result;
    	            }
    	            	
    		}catch(Exception e ) {
    			e.printStackTrace();
    		}finally {
    			try {
    					if(httpclient!=null) {
    						httpclient.close();
    					}
    				}catch(Exception e) {
    					e.printStackTrace();
    				}	
    		}
    		return result;
    	}
    	
    	// postJson 
    	public static String postJsonrequest(String url , Map<Object, Object> body , Map<Object, Object> headers){
    		
    		String basicUrl=url;
    		String result=null;
    		post =new HttpPost(basicUrl);
    		CloseableHttpClient httpclient=getignoreSSLClient();
    		try {
    			if(headers !=null && headers.size()>0) {
    				for(Map.Entry<Object, Object> entry:headers.entrySet()) {
    					post.setHeader(entry.getKey().toString(),entry.getValue().toString());
    				}
    			}else {
    				post.setHeader(null);
    				//header设置完毕
    			}
    			//body转string,处理entity传入httpEntity
    			StringEntity newEntity=new StringEntity(body.toString(),"utf-8");
    			post.setEntity(newEntity);;
    			response=httpclient.execute(post);
    			int errorCode =response.getStatusLine().getStatusCode();
    			if(String.valueOf(errorCode) !=null) {
    				entity =response.getEntity();
    				result=EntityUtils.toString(entity, "UTF-8");
    				return result;
    			}
    		}catch (Exception e) {
    			e.printStackTrace();
    		}finally {
    			try {
    				if(httpclient!=null) {
    					httpclient.close();
    				}
    				
    			}catch (Exception e) {
    				e.printStackTrace();
    			}
    		}
    		return result;
    	}	
    	
    	// download file ,两个都要带路径
    	public static void downloadfile(String url,String localfileName,String remotefileName) {
    		FileOutputStream output = null;
    		InputStream in = null;
    		CloseableHttpClient httpclient=getignoreSSLClient();
    		try {
    		get=new HttpGet(url);
    		get.addHeader("fileName",remotefileName );
    		response=httpclient.execute(get);
    		entity =response.getEntity();
    		in = entity.getContent();
    		long length = entity.getContentLength();
    		if (length <= 0) {
    			return;
    		}
    		File localfile = new File(localfileName);
    		
    		if(! localfile.exists()) {
    			localfile.createNewFile();
    		}
    		output=new FileOutputStream(localfile);
    	    byte[] buffer = new byte[4096];
    	    int readLength = 0;
    	    while ((readLength=in.read(buffer)) > 0) {
    	    byte[] bytes = new byte[readLength];
    	    System.arraycopy(buffer, 0, bytes, 0, readLength);
    	    output.write(bytes);
    	                 }         
    	    output.flush();
    		}catch(Exception e) {
    			e.printStackTrace();
    		}finally {
    			try {
    				if(in !=null) {
    					in.close();
    				}
    				if(output !=null) {
    					output.close();
    				}
    			}catch (IOException e) {
    				e.printStackTrace();
    			} 
    		}		
    	}
    	
    	// uploadfile 
    	public static void uploadfile(String localfilepath,String url) {
    		
    		
    		CloseableHttpClient httpclient=getignoreSSLClient();
    		try {
    		post = new HttpPost(url);
    		FileBody bin=new FileBody(new File(localfilepath));
    		HttpEntity reentity= MultipartEntityBuilder.create().addPart("bin",bin).build();
    		post.setEntity(entity);
    		response=httpclient.execute(post);
    		entity=response.getEntity();
    		if(entity!=null) {
    			// length entity.getContentLength();
    			String content=EntityUtils.toString(entity,"utf-8");
    			EntityUtils.consume(entity);
    		}
    		
    		}catch(Exception e) {
    			e.printStackTrace();
    		}finally {
    			try {
    				if(httpclient!=null ) {
    					httpclient.close();
    				}
    			}catch(Exception e) {
    				e.printStackTrace();
    			}
    		}
    			
    	}
    	
    	
    }
    

      

  • 相关阅读:
    使用Shell脚本查找程序对应的进程ID,并杀死进程
    转,mysql快速保存插入大量数据一些方法总结
    L2TP/IPSec一键安装脚本
    全文搜索引擎 Elasticsearch 入门教程
    vmware设置扩大硬盘后如何在linux内容扩容
    Java序列化说明
    GIT常用命令
    java中的CAS
    Class.forName()用法详解
    Java用pdfbox或icepdf转换PDF为图片时,中文乱码问题
  • 原文地址:https://www.cnblogs.com/SunshineKimi/p/10540266.html
Copyright © 2011-2022 走看看