package com.sumy.https; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.SocketTimeoutException; import java.security.KeyManagementException; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.UnrecoverableKeyException; import java.security.cert.CertificateException; import javax.net.ssl.SSLContext; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.HttpPost; import org.apache.http.conn.ConnectTimeoutException; import org.apache.http.conn.ConnectionPoolTimeoutException; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.conn.ssl.SSLContexts; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; import com.thoughtworks.xstream.io.xml.XmlFriendlyNameCoder; /** * 作用:Https 发送POST 请求 * * @author sumylu@globex.cn * @date 2016年6月22日 */ public class HttpsRequest implements IServiceRequest { private Logger logger = LoggerFactory.getLogger(HttpsRequest.class); private static final String CERT_PATH = HttpsRequest.class.getClassLoader().getResource("jks/icbc.jks").getFile(); private String charset_gbk = "GBK"; /** * 表示请求器是否已经做了初始化工作 */ private boolean hasInit = false; /** * 连接超时时间,默认10秒 */ private int socketTimeout = 10000; /** * 传输超时时间,默认30秒 */ private int connectTimeout = 30000; // 请求器的配置 private RequestConfig requestConfig; // HTTP请求器 private CloseableHttpClient httpClient; public HttpsRequest() throws UnrecoverableKeyException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException, IOException { init(); } private void init() throws IOException, KeyStoreException, UnrecoverableKeyException, NoSuchAlgorithmException, KeyManagementException { // Init keyStore KeyStore keyStore = KeyStore.getInstance("jks");// PKCS12、jks 等 FileInputStream instream = new FileInputStream(new File(CERT_PATH));// 加载本地的证书进行https加密传输 try { keyStore.load(instream, "12345678".toCharArray());// 设置证书密码 } catch (CertificateException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } finally { instream.close(); } // Init key manager factory /* * KeyManagerFactory kmf = * KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); * kmf.init(keyStore, "12345678".toCharArray()); KeyManager[] km = kmf.getKeyManagers(); * * // Init trust manager TrustManagerFactory tmf = * TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); * tmf.init(keyStore); TrustManager[] tms = tmf.getTrustManagers(); */ // Trust own CA and all self-signed certs, SSL protocol SSLContext sslcontext = SSLContexts.custom().useSSL().loadKeyMaterial(keyStore, "12345678".toCharArray()) .loadTrustMaterial(keyStore).build(); // sslcontext.init(km, tms, null); SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, null, null, SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER); httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).build(); // 根据默认超时限制初始化requestConfig requestConfig = RequestConfig.custom().setSocketTimeout(socketTimeout).setConnectTimeout(connectTimeout).build(); hasInit = true; } @Override public String sendPost(String url, Object xmlObj) throws UnrecoverableKeyException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException, IOException { if (!hasInit) { init(); } String result = null; HttpPost httpPost = new HttpPost(url); // 解决XStream对出现双下划线的bug XStream xStreamForRequestPostData = new XStream(new DomDriver("UTF-8", new XmlFriendlyNameCoder("-_", "_"))); // 将要提交给API的数据对象转换成XML格式数据Post给API String postDataXML = xStreamForRequestPostData.toXML(xmlObj); logger.info("API,POST请求参数:{}", postDataXML); // 得指明使用UTF-8编码,否则到API服务器XML的中文不能被成功识别 StringEntity postEntity = new StringEntity(postDataXML, charset_gbk); // httpPost.addHeader("Content-Type", "text/xml"); httpPost.setEntity(postEntity); // 设置请求器的配置 httpPost.setConfig(requestConfig); logger.info("Request line:{}", httpPost.getRequestLine()); try { HttpResponse response = httpClient.execute(httpPost); HttpEntity entity = response.getEntity(); result = EntityUtils.toString(entity, charset_gbk); } catch (ConnectionPoolTimeoutException e) { logger.error("http get throw ConnectionPoolTimeoutException(wait time out)"); } catch (ConnectTimeoutException e) { logger.error("http get throw ConnectTimeoutException"); } catch (SocketTimeoutException e) { logger.error("http get throw SocketTimeoutException"); } catch (Exception e) { logger.error("http get throw Exception"); } finally { httpPost.abort(); } return result; } private void resetRequestConfig() { requestConfig = RequestConfig.custom().setSocketTimeout(socketTimeout).setConnectTimeout(connectTimeout).build(); } /** * @return the hasInit */ public boolean isHasInit() { return hasInit; } /** * @return the socketTimeout */ public int getSocketTimeout() { return socketTimeout; } /** * @return the connectTimeout */ public int getConnectTimeout() { return connectTimeout; } /** * @param hasInit the hasInit to set */ public void setHasInit(boolean hasInit) { this.hasInit = hasInit; } /** * @param socketTimeout the socketTimeout to set */ public void setSocketTimeout(int socketTimeout) { this.socketTimeout = socketTimeout; resetRequestConfig(); } /** * @param connectTimeout the connectTimeout to set */ public void setConnectTimeout(int connectTimeout) { this.connectTimeout = connectTimeout; resetRequestConfig(); } /** * @return the requestConfig */ public RequestConfig getRequestConfig() { return requestConfig; } /** * @param requestConfig the requestConfig to set */ public void setRequestConfig(RequestConfig requestConfig) { this.requestConfig = requestConfig; } }
相关推荐
httpClient模拟https请求,包含图片上传等。
模拟https请求
Java实现的Https请求工具类。 https的java工具类 Https
Http/Https请求测试工具 可支持测试get,post,put,head等请求方式
socket http/https 模拟登录 请求页面等
纯C语言写的https客户端,支持http及https的模拟GET和POST提交, 最大优势在于不依赖其他任何库(比如openssl库),并且支持window,linux等多平台,因此get及post效率较高,可移植性很好。 本次上传的是vc6下的完整...
模拟post请求 可支持https请求。
C#实现模拟登陆之类的功能,可以发起HTTPS,以及HTTP的请求
url="https://www.baidu.com" req_header = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11", "Accept":"text/html;q=0.9,*/*;q=0.8", ...
主要介绍了C#模拟Http与Https请求框架类,实例分析了处理http与https请求的方法与信息处理的技巧,需要的朋友可以参考下
除此之外,我们对请求添加签名的校验,key设置为X-Sign 接口定义 /// /// 获取时间戳(毫秒). /// /// <param name=dateTime></param> /// <returns></returns> [HttpPost] [AllowAnonymous]
C# asp.net http HttpWebRequest模拟浏览器请求下载文件到本地
支持HTTP和HTTPS请求,自动生成本地SSL证书。 完全自定义的响应内容。 :wrapped_gift: 下载 注意 当前仅支持Windows平台。 请确保Windows已安装 (默认情况下通常安装Win7 +系统)。 尽可能以管理员身份运行...
(完整版)JAVA利用HttpClient进行POST请求(HTTPS).doc
通过本课程,老师将带你实战http模拟请求,通过实站网站http请求。然后利用http专业工具分析http请求数据,了解http的原理。 ? ? ? 2.了解了http后,手把手教你利用java?代码模拟http请求,利用python?代码模拟http...
NULL 博文链接:https://javasam.iteye.com/blog/2117845
NULL 博文链接:https://xieke90.iteye.com/blog/2259953
NULL 博文链接:https://tujunlan.iteye.com/blog/1997745
使用apche开源组件,java代码使用https协议请求第三方接口,模拟参数加文件一起提交示例代码,如果请求有乱码,请屏蔽GBK转UTF-8那一句代码。