最近在做相关的支付工作,接口间内部需要使用用https的方式提交数据,寻寻觅觅了很长时间通常的做法是将证书安装到本机,再使用https链接,这样极其不方便,如果我方使用的是集群的方式,即使是两个命令,那这个工作也不容忽视,毕竟现在时21世纪,能自动的就不要人工。有时人工总会出点问题!~~
废话少说了,直接上代码
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.security.cert.X509Certificate;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.params.ConnManagerPNames;
import org.apache.http.conn.params.ConnPerRouteBean;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.SingleClientConnManager;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
public class HttpsTest {
public static void main(String[] args) throws Exception {
String url = "https://abc.com/usr/signin.do
";
// // 获得密匙库
// KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
// FileInputStream instream = new FileInputStream(new File(" D:/zzaa "));
// // 密匙库的密码
// trustStore.load(instream, " 123456 ".toCharArray());
// // 注册密匙库
X509TrustManager tm = new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] xcs, String string) {}
public void checkServerTrusted(X509Certificate[] xcs, String string) {}
public X509Certificate[] getAcceptedIssuers() {return null;}
};
SSLContext sslcontext = SSLContext.getInstance("TLS");
sslcontext.init(null, new TrustManager[]{tm}, null);
SSLSocketFactory socketFactory = new SSLSocketFactory(sslcontext,SSLSocketFactory.STRICT_HOSTNAME_VERIFIER);
// 不校验域名
// socketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
Scheme sch = new Scheme("https", 443, socketFactory);
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
schemeRegistry.register(sch);
HttpParams params = new BasicHttpParams();
params.setParameter(ConnManagerPNames.MAX_TOTAL_CONNECTIONS, 30);
params.setParameter(ConnManagerPNames.MAX_CONNECTIONS_PER_ROUTE, new ConnPerRouteBean(30));
params.setParameter(HttpProtocolParams.USE_EXPECT_CONTINUE, false);
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
ClientConnectionManager cm = new SingleClientConnManager(params, schemeRegistry);
HttpClient httpClient = new DefaultHttpClient(cm, params);
// 获得HttpGet对象
HttpPost post = new HttpPost(url);
// 发送请求
HttpResponse response = httpClient.execute(post);
// 输出返回值
InputStream is = response.getEntity().getContent();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line = "";
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
}
分享到:
相关推荐
标题中的“httpclient3 自动登陆淘宝, 开心网”指的是使用Apache HttpClient 3.x库来实现自动化登录淘宝和开心网的功能。HttpClient是一个强大的HTTP客户端API,它允许开发者模拟浏览器行为,发送HTTP请求并接收...
4. **配置HttpClient实例**:最后,你需要将之前创建的HTTPS连接管理器设置到HttpClient实例中,这样所有的请求都将通过HTTPS进行。 在开发过程中,可能还需要处理如证书链问题、自签名证书和不受信任的CA等问题。...
在实际应用中,Apache HttpClient可以用于各种场景,如Web服务调用、爬虫项目、自动化测试等。博客可能涵盖这些场景的具体实现,包括设置请求头、处理HTTP状态码、处理响应实体、异常处理等。同时,它可能还会涉及...
通过以上方法,可以确保HttpClient能够正确处理HTTPS请求,即使是在需要接受所有证书的情况下。 --- #### 7. 使用HttpClient解短网址 **7.1 概览** 在互联网上,经常会遇到短网址链接,这些链接通常指向较长的...
4. **SSL/TLS支持**:HttpClient支持HTTPS通信,通过配置`SSLContext`和`KeyManager`,可以处理自签名证书或者进行其他安全相关的定制。 5. **Redirect策略**:HttpClient可以配置不同的重定向策略,例如自动处理...
在描述中提到的“NULL 博文链接:https://fatalove.iteye.com/blog/814563”,虽然具体内容没有提供,但通常博主会在这类博客中分享使用HttpClient的经验、示例代码或者解决特定问题的方法。由于没有实际内容,我们...
通过阅读《HttpClient实战》等技术书籍,以及参考官方文档和社区博客(如提供的博文链接),可以进一步了解HttpClient的高级特性和最佳实践。在实际开发中,HttpClient是一个强大且灵活的工具,能够帮助你轻松处理...
HttpClient是Apache基金会下的一个开源HTTP客户端库,广泛应用于Java编程中,用于执行HTTP请求并处理响应。HttpClient提供了丰富的API,可以实现GET、POST以及其他HTTP方法,支持Cookie管理、重定向处理、连接池管理...
4. **工具类**:资源包中的“工具类”可能包含了对上述HTTP库的封装,例如创建便捷的静态方法来发起HTTP请求,处理响应,或者实现特定的逻辑,如自动登录、上传下载等。这样的工具类可以极大地提高开发效率,减少...
以上代码创建了一个信任所有证书的 SSLContext,但请注意这在生产环境中是不安全的,应根据实际需要进行更安全的证书管理。 在处理 Element UI 的 CDN 资源时,还可以考虑将下载的文件保存在一个特定的目录结构中,...
2. 创建 OkHttpClient 实例:配置连接池大小、超时时间等参数,并实例化 OkHttpClient 对象。 3. 构建 Request 对象:设置 URL、HTTP 方法(GET、POST 等)和其他请求头信息。 4. 发起请求:使用 OkHttpClient 对象...
- **Apache HttpClient**:一个功能强大的HTTP客户端库,提供了更灵活和高效的API来处理HTTP请求。 - **OkHttp**:由Square公司开发的现代HTTP客户端,以其高性能和易用性而受到欢迎。 2. **User-Agent 设置**: ...
Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个...