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
- Java发送HTTP的POST和GET方式请求
- java使用post和get方式发送http请求
- java发送http get 和 post 请求
- java发送http的get、post请求
- java发送http的get、post请求
- java发送http的get、post请求
- java发送http的get、post请求
- java发送http的get、post请求
- java发送http的get、post请求
- java发送http的get、post请求
- java发送http的get、post请求
- java发送http的get、post请求
- java发送http的get、post请求
- java发送http的get、post请求
- java发送http的get、post请求
- java发送http的get、post请求
- java发送http的get、post请求
- java发送http的get、post请求
- python dict字典
- 有关iOS GCD上的一些资料。
- 静态成员变量和静态成员函数
- hdu4011(水贪心)
- 【游戏之乐】让CPU占用率曲线听你指挥
- Java发送HTTP的POST和GET方式请求
- [ios]Xcode 问题调试 慢慢更新
- VIM ctags的一个小技巧
- synatx.css
- week plan: 2014.11.1-1014.11.7
- 机器学习中的范数规则化之(二)核范数与规则项参数选择
- Android一些经典的开源项目
- 小工具(7):项目所需小工具之VerifyCodeServlet(生成一次性图片验证码)
- 谈谈阿里系的技术积累