Java发送HTTP的POST和GET方式请求

来源:互联网 发布:mac人鱼姬价格 编辑:程序博客网 时间:2024/04/20 23:40

关于连接配置方面还不是很懂,但其他按照如下类再根据具体需要做调整应该没什么问题,可用于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 {//创建要访问的urlURL 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<String, List<String>> map = httpUrlConn.getHeaderFields();//// 遍历所有的响应头字段//for (String key : map.keySet()) {//    System.out.println(key + "--->" + map.get(key));//}//////////////////////////////////////////////////////////////////有数据要提交时——POST,有数据要接收时——GETif(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 blocke.printStackTrace();} catch (NoSuchAlgorithmException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (NoSuchProviderException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (KeyManagementException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.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 blocke.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;}}}


0 0
原创粉丝点击