该方法使用apache的httpclient实现
第一步:创建SSLClient
import java.security.cert.CertificateException
import java.security.cert.X509Certificate
import javax.net.ssl.SSLContext
import javax.net.ssl.TrustManager
import javax.net.ssl.X509TrustManager
import org.apache.http.conn.ClientConnectionManager
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
public class SSLClient extends DefaultHttpClient{
public SSLClient() throws Exception{
super()
SSLContext ctx = SSLContext.getInstance("TLS")
X509TrustManager tm = new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null
}
}
ctx.init(null, new TrustManager[]{tm}, null)
SSLSocketFactory ssf = new SSLSocketFactory(ctx,SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER)
ClientConnectionManager ccm = this.getConnectionManager()
SchemeRegistry sr = ccm.getSchemeRegistry()
sr.register(new Scheme("https", 443, ssf))
}
}
第二步:实现自己的https工具类
import org.apache.http.HttpEntity
import org.apache.http.HttpResponse
import org.apache.http.client.HttpClient
import org.apache.http.client.methods.HttpGet
import org.apache.http.client.methods.HttpPost
import org.apache.http.entity.StringEntity
import org.apache.http.message.BasicHeader
import org.apache.http.protocol.HTTP
import org.apache.http.util.EntityUtils
import java.util.Map
public class HttpsClientUtil {
private static final String CHAREST = "utf-8"
/**
* 发送post请求
* @param url
* @return
*/
public static String doPost(String url,String mapParam){
HttpClient httpClient = null
HttpPost httpPost = null
String result = null
try{
httpClient = new SSLClient()
httpPost = new HttpPost(url)
//设置参数
httpPost.setHeader("Content-Type", "application/json")
httpPost.addHeader("Authorization", "Basic YWRtaW46")
StringEntity s = new StringEntity(mapParam, CHAREST)
s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json"))
httpPost.setEntity(s)
HttpResponse response = httpClient.execute(httpPost)
if(response != null){
HttpEntity resEntity = response.getEntity()
if(resEntity != null){
result = EntityUtils.toString(resEntity,CHAREST)
}
}
}catch(Exception ex){
ex.printStackTrace()
}
return result
}
/**
* 发送get请求
* @param url 链接地址
* @return
*/
public static String doGet(String url){
HttpClient httpClient = null
HttpGet httpGet= null
String result = null
try {
httpClient = new SSLClient()
httpGet = new HttpGet(url)
HttpResponse response = httpClient.execute(httpGet)
if(response != null){
HttpEntity resEntity = response.getEntity()
if(resEntity != null){
result = EntityUtils.toString(resEntity,CHAREST)
}
}
} catch (Exception e) {
e.printStackTrace()
}
return result
}
/**
* 发送get请求,并设置get的请求头
* @param url 链接地址
* @return
*/
public static String setHeadDoGet(String url,Map headers){
HttpClient httpClient = null
HttpGet httpGet= null
String result = null
try {
httpClient = new SSLClient()
httpGet = new HttpGet(url)
for (Map.Entry e : headers.entrySet()) {
httpGet.addHeader(e.getKey(), e.getValue())
}
HttpResponse response = httpClient.execute(httpGet)
if(response != null){
HttpEntity resEntity = response.getEntity()
if(resEntity != null){
result = EntityUtils.toString(resEntity,CHAREST)
}
}
} catch (Exception e) {
e.printStackTrace()
}
return result
}
}
ps:有需要设置post请求头的请求,同学们可以参考setHeadDoGet方法进行编写。 需要用到的apache的httpclient-4.5.9.jar包 。
首先,我们先看一下http的头信息到底是什么:HTTP(HyperTextTransferProtocol) 即超文本传输协议,目前网页传输的的通用协议。HTTP协议采用了请求/响应模型,浏览器或其他客户端发出请求,服务器给与响应。就整个网络资源传输而 言,包括message-header和message-body两部分。首先传递message- header,即http header消息。http header 消息通常被分为4个部分: general header, request header, response header, entity header。但是这种分法就理解而言,感觉界限不太明确,根据日常使用,大体分为Request和Response两部分。在通常的servlet/jsp应用中,我们只是从http的header中取得信息,如果要设置信息,需要用到HttpClient,具体的设置方法如下:HttpResponse response = null HttpGet get = new HttpGet(url) get", 80) HttpHost wikipediaEn = new HttpHost("en", 80) cm.setMaxPerRoute(new HttpRoute(googleResearch), 30) cm.setMaxPerRoute(new HttpRoute(wikipediaEn), 50)DefaultHttpClient client = new DefaultHttpClient(cm)可以通过win.setRequestHear(name,value)来修改参数为两个
第一个为Name,为字段名,例如Date
第二个为Value,为字段值,例如Wed, 01 Mar 2009 12:00:00 GMT
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)