关于连接配置方面还不是很懂,但其他按照如下类再根据具体需要做调整应该没什么问题,可用于HTTP和HTTPS
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Map;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
public class Http_Test {
/**
*
* @param requestUrl url的字符串形式
* @param requestMethod 请求方式:POST或者GET
* @param outputStr 如果请求方式为POST的话,要POST的内容,GET的话为null
*/
public String httpRequest(String requestUrl, String requestMethod, String outputStr){
//POST方式用,根据需要选其一即可
OutputStream outputStream = null;
DataOutputStream dataOutputStream = null;
PrintWriter printWriter = null;
//POST和GET都要用
InputStream inputStream = null;
InputStreamReader inputStreamReader = null;
BufferedReader bufferedreader = null;
StringBuilder sb = new StringBuilder();
try {
//创建要访问的url
URL url = new URL(requestUrl);
///非必须,看需要
// 创建SSLContext对象,并使用我们指定的信任管理器初始化
TrustManager[] tm = { new MyX509TrustManager() };
SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
sslContext.init(null, tm, new java.security.SecureRandom());
// 从上述SSLContext对象中得到SSLSocketFactory对象
SSLSocketFactory ssf = sslContext.getSocketFactory();
///
//利用URL的openConnection()方法返回http(https)连接对象,根据URL类型不同返回不同的URLConnection子类的对象
HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection(); //如果访问HTTPS则强制转换为HttpsURLConnection对象
//对httpUrlConn进行设置,关于设置这点还不是很懂,看需要配置
if(requestMethod.equalsIgnoreCase("POST")){
httpUrlConn.setSSLSocketFactory(ssf); //如果前面有创建
httpUrlConn.setDoOutput(true); // 设置是否向connection输出SSLSocketFactory对象的话选择
httpUrlConn.setDoInput(true); // 设置是否向connection输入,这两个属性设置为True都是POST必须的
httpUrlConn.setUseCaches(false);// 设置是否使用缓存,Post 请求不能使用缓存
httpUrlConn.setRequestMethod("GET/POST"); // 设置请求方式(GET/POST)
// 配置本次连接的Content-type,配置为application/x- www-form-urlencoded的
// 意思是正文是urlencoded编码过的form参数,下面我们可以看到我们对正文内容使用URLEncoder.encode进行编码
// 这一步的设置可能与POST的内容,即本方法的outputStr有关
// 要提交的字符串,用URLEncoder对中文字符进行URL编码,且指定字符编码
// String outputStr = "hello=" + URLEncoder.encode("你好", "utf-8");
httpUrlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
// 设置通用的请求属性,应该都是同一种东西
httpUrlConn.setRequestProperty("accept", "*/*");
httpUrlConn.setRequestProperty("connection", "Keep-Alive");
httpUrlConn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
}else if(requestMethod.equalsIgnoreCase("GET")){
httpUrlConn.setSSLSocketFactory(ssf);
httpUrlConn.setDoOutput(true); // 设置是否向connection输出
httpUrlConn.setDoInput(true); // 设置是否向connection输入,这两个属性设置为True都是POST必须的
httpUrlConn.setUseCaches(false);// 设置是否使用缓存,Post 请求不能使用缓存
httpUrlConn.setRequestMethod("GET/POST"); // 设置请求方式(GET/POST)
// 配置本次连接的Content-type,配置为application/x- www-form-urlencoded的
// 意思是正文是urlencoded编码过的form参数,下面我们可以看到我们对正文内容使用URLEncoder.encode进行编码
httpUrlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
// 设置通用的请求属性,应该都是同一种东西
httpUrlConn.setRequestProperty("accept", "*/*");
httpUrlConn.setRequestProperty("connection", "Keep-Alive");
httpUrlConn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
}
//httpUrlConn进行连接 httpUrlConn.getOutputStream会隐含的进行connect
//httpUrlConn.connect();
获取相应头字段非必须,看需要
获取所有响应头字段
//Map> map = httpUrlConn.getHeaderFields();
遍历所有的响应头字段
//for (String key : map.keySet()) {
// System.out.println(key + "--->" + map.get(key));
//}
//有数据要提交时——POST,有数据要接收时——GET
if(requestMethod.equalsIgnoreCase("POST")){ //先提交再接收
outputStream = httpUrlConn.getOutputStream();//输出字节
//关于JAVA IO的Stream太多了,根据需要自己选择,不限于以下3种
//1.直接用outputStream的write方法输出
// 输出字符串outputStr,且指定字符编码
outputStream.write(outputStr.getBytes("UTF-8"));
outputStream.close();
//2.将outputStream用DataOutputStream再进一步包装
dataOutputStream = new DataOutputStream(outputStream);
//要提交的字符串,用URLEncoder对中文字符进行URL编码,且指定字符编码
//String outputStr = " firstname= " + URLEncoder.encode(" 一个大肥人 ", " utf-8 ");
dataOutputStream.writeBytes(outputStr);
dataOutputStream.flush();
dataOutputStream.close();
outputStream.close();
//3.将outputStream用PrintWriter再进一步包装
printWriter = new PrintWriter(outputStream);
printWriter.print(outputStr);
printWriter.flush();
printWriter.close();
outputStream.close();
//
//POST可能有返回数据需要接收
inputStream = httpUrlConn.getInputStream();//接收字节
inputStreamReader = new InputStreamReader(inputStream,"utf-8");//接收的字节转化为字符,还可以指定编码
bufferedreader = new BufferedReader(inputStreamReader);
String lines;
while ((lines = bufferedreader.readLine()) != null) {
sb.append(lines);
}
bufferedreader.close();
inputStreamReader.close();
inputStream.close();
}else if(requestMethod.equalsIgnoreCase("GET")){ //GET的话可以把请求参数附在URL里,只提交不用接收
//首先打开httpUrlConn的input流,再用inputStreamReader对inputStream包装,在用BufferedReader接收
inputStream = httpUrlConn.getInputStream();//接收字节
inputStreamReader = new InputStreamReader(inputStream,"utf-8");//接收的字节转化为字符,还可以指定编码
bufferedreader = new BufferedReader(inputStreamReader);
sb = new StringBuilder();
String lines;
while ((lines = bufferedreader.readLine()) != null) {
sb.append(lines);
}
}
//关闭httpUrlConn连接
httpUrlConn.disconnect();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchProviderException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (KeyManagementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
try{
if(outputStream != null)
outputStream.close();
if(dataOutputStream != null)
dataOutputStream.close();
if(printWriter != null)
printWriter.close();
if(inputStream != null)
inputStream.close();
if(inputStreamReader != null)
inputStreamReader.close();
if(bufferedreader != null)
bufferedreader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return sb.toString();
}
/**
* 证书信任管理器(用于https请求)
*
* @author liufeng
* @date 2013-08-08
*/
public class MyX509TrustManager implements X509TrustManager {
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
}