JAVA通过HttpClient发送HTTP请求的方法示例
HttpClient介绍
HttpClient不是一个浏览器。它是一个客户端的HTTP通信实现库。HttpClient的目标是发送和接收HTTP报文。HttpClient不会去缓存内容,执行嵌入在HTML页面中的javascript代码,猜测内容类型,重新格式化请求/重定向URI,或者其它和HTTP运输无关的功能。
HttpClient使用
使用需要引入jar包,maven项目引入如下:
org.apache.httpcomponents httpclient 4.5 org.apache.httpcomponents httpcore 4.4.4 org.apache.httpcomponents httpmime 4.5
使用方法,代码如下:
packagecom.test; importjava.io.File; importjava.io.IOException; importjava.security.KeyManagementException; importjava.security.KeyStoreException; importjava.security.NoSuchAlgorithmException; importjava.util.Iterator; importjava.util.List; importjava.util.Map; importorg.apache.http.HttpEntity; importorg.apache.http.HttpStatus; importorg.apache.http.client.config.RequestConfig; importorg.apache.http.client.methods.CloseableHttpResponse; importorg.apache.http.client.methods.HttpGet; importorg.apache.http.client.methods.HttpPost; importorg.apache.http.config.Registry; importorg.apache.http.config.RegistryBuilder; importorg.apache.http.conn.socket.ConnectionSocketFactory; importorg.apache.http.conn.socket.PlainConnectionSocketFactory; importorg.apache.http.conn.ssl.SSLConnectionSocketFactory; importorg.apache.http.conn.ssl.SSLContextBuilder; importorg.apache.http.conn.ssl.TrustSelfSignedStrategy; importorg.apache.http.entity.ContentType; importorg.apache.http.entity.StringEntity; importorg.apache.http.entity.mime.MultipartEntityBuilder; importorg.apache.http.entity.mime.content.FileBody; importorg.apache.http.entity.mime.content.StringBody; importorg.apache.http.impl.client.CloseableHttpClient; importorg.apache.http.impl.client.DefaultHttpRequestRetryHandler; importorg.apache.http.impl.client.HttpClients; importorg.apache.http.impl.conn.PoolingHttpClientConnectionManager; importorg.apache.http.util.EntityUtils; /** * *@authorH__D *@date2016年10月19日上午11:27:25 * */ publicclassHttpClientUtil{ //utf-8字符编码 publicstaticfinalStringCHARSET_UTF_8="utf-8"; //HTTP内容类型。 publicstaticfinalStringCONTENT_TYPE_TEXT_HTML="text/xml"; //HTTP内容类型。相当于form表单的形式,提交数据 publicstaticfinalStringCONTENT_TYPE_FORM_URL="application/x-www-form-urlencoded"; //HTTP内容类型。相当于form表单的形式,提交数据 publicstaticfinalStringCONTENT_TYPE_JSON_URL="application/json;charset=utf-8"; //连接管理器 privatestaticPoolingHttpClientConnectionManagerpool; //请求配置 privatestaticRequestConfigrequestConfig; static{ try{ //System.out.println("初始化HttpClientTest~~~开始"); SSLContextBuilderbuilder=newSSLContextBuilder(); builder.loadTrustMaterial(null,newTrustSelfSignedStrategy()); SSLConnectionSocketFactorysslsf=newSSLConnectionSocketFactory( builder.build()); //配置同时支持HTTP和HTPPS RegistrysocketFactoryRegistry=RegistryBuilder. create().register( "http",PlainConnectionSocketFactory.getSocketFactory()).register( "https",sslsf).build(); //初始化连接管理器 pool=newPoolingHttpClientConnectionManager( socketFactoryRegistry); //将最大连接数增加到200,实际项目最好从配置文件中读取这个值 pool.setMaxTotal(200); //设置最大路由 pool.setDefaultMaxPerRoute(2); //根据默认超时限制初始化requestConfig intsocketTimeout=10000; intconnectTimeout=10000; intconnectionRequestTimeout=10000; requestConfig=RequestConfig.custom().setConnectionRequestTimeout( connectionRequestTimeout).setSocketTimeout(socketTimeout).setConnectTimeout( connectTimeout).build(); //System.out.println("初始化HttpClientTest~~~结束"); }catch(NoSuchAlgorithmExceptione){ e.printStackTrace(); }catch(KeyStoreExceptione){ e.printStackTrace(); }catch(KeyManagementExceptione){ e.printStackTrace(); } //设置请求超时时间 requestConfig=RequestConfig.custom().setSocketTimeout(50000).setConnectTimeout(50000) .setConnectionRequestTimeout(50000).build(); } publicstaticCloseableHttpClientgetHttpClient(){ CloseableHttpClienthttpClient=HttpClients.custom() //设置连接池管理 .setConnectionManager(pool) //设置请求配置 .setDefaultRequestConfig(requestConfig) //设置重试次数 .setRetryHandler(newDefaultHttpRequestRetryHandler(0,false)) .build(); returnhttpClient; } /** *发送Post请求 * *@paramhttpPost *@return */ privatestaticStringsendHttpPost(HttpPosthttpPost){ CloseableHttpClienthttpClient=null; CloseableHttpResponseresponse=null; //响应内容 StringresponseContent=null; try{ //创建默认的httpClient实例. httpClient=getHttpClient(); //配置请求信息 httpPost.setConfig(requestConfig); //执行请求 response=httpClient.execute(httpPost); //得到响应实例 HttpEntityentity=response.getEntity(); //可以获得响应头 //Header[]headers=response.getHeaders(HttpHeaders.CONTENT_TYPE); //for(Headerheader:headers){ //System.out.println(header.getName()); //} //得到响应类型 //System.out.println(ContentType.getOrDefault(response.getEntity()).getMimeType()); //判断响应状态 if(response.getStatusLine().getStatusCode()>=300){ thrownewException( "HTTPRequestisnotsuccess,Responsecodeis"+response.getStatusLine().getStatusCode()); } if(HttpStatus.SC_OK==response.getStatusLine().getStatusCode()){ responseContent=EntityUtils.toString(entity,CHARSET_UTF_8); EntityUtils.consume(entity); } }catch(Exceptione){ e.printStackTrace(); }finally{ try{ //释放资源 if(response!=null){ response.close(); } }catch(IOExceptione){ e.printStackTrace(); } } returnresponseContent; } /** *发送Get请求 * *@paramhttpGet *@return */ privatestaticStringsendHttpGet(HttpGethttpGet){ CloseableHttpClienthttpClient=null; CloseableHttpResponseresponse=null; //响应内容 StringresponseContent=null; try{ //创建默认的httpClient实例. httpClient=getHttpClient(); //配置请求信息 httpGet.setConfig(requestConfig); //执行请求 response=httpClient.execute(httpGet); //得到响应实例 HttpEntityentity=response.getEntity(); //可以获得响应头 //Header[]headers=response.getHeaders(HttpHeaders.CONTENT_TYPE); //for(Headerheader:headers){ //System.out.println(header.getName()); //} //得到响应类型 //System.out.println(ContentType.getOrDefault(response.getEntity()).getMimeType()); //判断响应状态 if(response.getStatusLine().getStatusCode()>=300){ thrownewException( "HTTPRequestisnotsuccess,Responsecodeis"+response.getStatusLine().getStatusCode()); } if(HttpStatus.SC_OK==response.getStatusLine().getStatusCode()){ responseContent=EntityUtils.toString(entity,CHARSET_UTF_8); EntityUtils.consume(entity); } }catch(Exceptione){ e.printStackTrace(); }finally{ try{ //释放资源 if(response!=null){ response.close(); } }catch(IOExceptione){ e.printStackTrace(); } } returnresponseContent; } /** *发送post请求 * *@paramhttpUrl *地址 */ publicstaticStringsendHttpPost(StringhttpUrl){ //创建httpPost HttpPosthttpPost=newHttpPost(httpUrl); returnsendHttpPost(httpPost); } /** *发送get请求 * *@paramhttpUrl */ publicstaticStringsendHttpGet(StringhttpUrl){ //创建get请求 HttpGethttpGet=newHttpGet(httpUrl); returnsendHttpGet(httpGet); } /** *发送post请求(带文件) * *@paramhttpUrl *地址 *@parammaps *参数 *@paramfileLists *附件 */ publicstaticStringsendHttpPost(StringhttpUrl,Map maps,List fileLists){ HttpPosthttpPost=newHttpPost(httpUrl);//创建httpPost MultipartEntityBuildermeBuilder=MultipartEntityBuilder.create(); if(maps!=null){ for(Stringkey:maps.keySet()){ meBuilder.addPart(key,newStringBody(maps.get(key),ContentType.TEXT_PLAIN)); } } if(fileLists!=null){ for(Filefile:fileLists){ FileBodyfileBody=newFileBody(file); meBuilder.addPart("files",fileBody); } } HttpEntityreqEntity=meBuilder.build(); httpPost.setEntity(reqEntity); returnsendHttpPost(httpPost); } /** *发送post请求 * *@paramhttpUrl *地址 *@paramparams *参数(格式:key1=value1&key2=value2) * */ publicstaticStringsendHttpPost(StringhttpUrl,Stringparams){ HttpPosthttpPost=newHttpPost(httpUrl);//创建httpPost try{ //设置参数 if(params!=null&¶ms.trim().length()>0){ StringEntitystringEntity=newStringEntity(params,"UTF-8"); stringEntity.setContentType(CONTENT_TYPE_FORM_URL); httpPost.setEntity(stringEntity); } }catch(Exceptione){ e.printStackTrace(); } returnsendHttpPost(httpPost); } /** *发送post请求 * *@parammaps *参数 */ publicstaticStringsendHttpPost(StringhttpUrl,Map maps){ Stringparem=convertStringParamter(maps); returnsendHttpPost(httpUrl,parem); } /** *发送post请求发送json数据 * *@paramhttpUrl *地址 *@paramparamsJson *参数(格式json) * */ publicstaticStringsendHttpPostJson(StringhttpUrl,StringparamsJson){ HttpPosthttpPost=newHttpPost(httpUrl);//创建httpPost try{ //设置参数 if(paramsJson!=null&¶msJson.trim().length()>0){ StringEntitystringEntity=newStringEntity(paramsJson,"UTF-8"); stringEntity.setContentType(CONTENT_TYPE_JSON_URL); httpPost.setEntity(stringEntity); } }catch(Exceptione){ e.printStackTrace(); } returnsendHttpPost(httpPost); } /** *发送post请求发送xml数据 * *@paramhttpUrl地址 *@paramparamsXml参数(格式Xml) * */ publicstaticStringsendHttpPostXml(StringhttpUrl,StringparamsXml){ HttpPosthttpPost=newHttpPost(httpUrl);//创建httpPost try{ //设置参数 if(paramsXml!=null&¶msXml.trim().length()>0){ StringEntitystringEntity=newStringEntity(paramsXml,"UTF-8"); stringEntity.setContentType(CONTENT_TYPE_TEXT_HTML); httpPost.setEntity(stringEntity); } }catch(Exceptione){ e.printStackTrace(); } returnsendHttpPost(httpPost); } /** *将map集合的键值对转化成:key1=value1&key2=value2的形式 * *@paramparameterMap *需要转化的键值对集合 *@return字符串 */ publicstaticStringconvertStringParamter(MapparameterMap){ StringBufferparameterBuffer=newStringBuffer(); if(parameterMap!=null){ Iteratoriterator=parameterMap.keySet().iterator(); Stringkey=null; Stringvalue=null; while(iterator.hasNext()){ key=(String)iterator.next(); if(parameterMap.get(key)!=null){ value=(String)parameterMap.get(key); }else{ value=""; } parameterBuffer.append(key).append("=").append(value); if(iterator.hasNext()){ parameterBuffer.append("&"); } } } returnparameterBuffer.toString(); } publicstaticvoidmain(String[]args)throwsException{ System.out.println(sendHttpGet("http://www.baidu.com")); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。