赞
踩
http和https的使用区别
https(Secure Hypertext Transfer Protocol)安全超文本传输协议,使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版(https=SSL+HTTP)。
端口不同:http是80,https是443。默认都省略。使用https会使网站访问速度变慢,但是会更安全。假如为了安全保密,将一个网站所有的Web应用都启用SSL技术来加密,并使用HTTPS协议进行传输,那么该网站的性能和效率将会大大降低,而且没有这个必要,因为一般来说并不是所有数据都要求那么高的安全保密级别,所以,我们只需对那些涉及机密数据的交互处理使用HTTPS协议,这样就做到鱼与熊掌兼得。总之不需要用https 的地方,就尽量不要用。
对于同时支持HTTPS和HTTP的资源,引用的时候要把引用资源的URL里的协议头去掉,例如://www.example.com/scirpt.js,这样相当于相对路径,即浏览器会自动根据当前是HTTPS还是HTTP来给资源URL补上协议头的,可以达到无缝切换。如果是站内资源,最好是HTTP和HTTPS各一份,然后再通过相对路径的方式引用,这样就可以完美的解决掉这个问题了。
http
80端口http默认端口
Socket socket = new Socket(InetAddress.getByName(url.getHost()), 80);
https
443端口即网页浏览端口,主要是用于HTTPS服务,是提供加密和通过安全端口传输的另一种HTTP。
Socket socket = (SSLSocket)((SSLSocketFactory)SSLSocketFactory.getDefault()).createSocket(InetAddress.getByName(url.getHost()), 443);
其他保持一致
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.net.URL; import java.net.URLEncoder; import java.util.Calendar; import java.util.Locale; import java.util.Map; import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLSocketFactory; import com.rl.mobile.entity.FormFile; import android.text.format.DateFormat; /** * 上传文件到服务器 * * @author Administrator * */ public class SocketHttpRequester { //https 用这个 http用上面的 本项目目前只用到https所以上面的可注销 public static boolean postSSLSocketFactory(String path, Map<String, String> params, FormFile[] files) throws Exception { String BOUNDARY = "---------------------------7da2137580612"; //boundary就是request头和上传文件内容的分隔符 final String endline = "--" + BOUNDARY + "--\r\n";// 数据结束标志 int fileDataLength = 0; String name=DateFormat.format("yyyyMMddhhmmss",Calendar.getInstance(Locale.CHINA))+""; for (FormFile uploadFile : files) {// 得到文件类型数据的总长度 StringBuilder fileExplain = new StringBuilder(); fileExplain.append("--"); fileExplain.append(BOUNDARY); fileExplain.append("\r\n"); name = DateFormat.format("yyyyMMddhhmmss",Calendar.getInstance(Locale.CHINA))+"."+getExtensionName(uploadFile.getFilname()); fileExplain.append("Content-Disposition: form-data;name=\""+ uploadFile.getParameterName()+"\";filename=\""+ name + "\"\r\n"); fileExplain.append("Content-Type: "+ uploadFile.getContentType()+"\r\n\r\n"); fileExplain.append("\r\n"); fileDataLength += fileExplain.length(); if(uploadFile.getInStream()!=null){ fileDataLength += uploadFile.getFile().length(); }else{ fileDataLength += uploadFile.getData().length; } } StringBuilder textEntity = new StringBuilder(); for (Map.Entry<String, String> entry : params.entrySet()) {// 构造文本类型参数的实体数据 textEntity.append("--"); textEntity.append(BOUNDARY); textEntity.append("\r\n"); textEntity.append("Content-Disposition: form-data; name=\""+ entry.getKey() + "\"\r\n\r\n"); textEntity.append(URLEncoder.encode(MStringUtils.getSpecial(entry.getValue()), "UTF-8")); textEntity.append("\r\n"); } // 计算传输给服务器的实体数据总长度 int dataLength = textEntity.toString().getBytes().length + fileDataLength + endline.getBytes().length; URL url = new URL(path); int port = 443; Socket socket = (SSLSocket)((SSLSocketFactory)SSLSocketFactory.getDefault()).createSocket(InetAddress.getByName(url.getHost()), 443); OutputStream outStream = socket.getOutputStream(); // 下面完成HTTP请求头的发送 String requestmethod = "POST " + url.getPath() + " HTTP/1.1\r\n"; outStream.write(requestmethod.getBytes()); String accept = "Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*\r\n"; outStream.write(accept.getBytes()); String language = "Accept-Language: zh-CN\r\n"; outStream.write(language.getBytes()); String site = "site:"+Constant.SITE+"\r\n"; outStream.write(site.getBytes()); String authorize = "authorize:"+Constant.AUTHORIZE+"\r\n"; outStream.write(authorize.getBytes()); String contenttype = "Content-Type: multipart/form-data;boundary=" + BOUNDARY + "\r\n"; outStream.write(contenttype.getBytes()); String contentlength = "Content-Length: " + dataLength + "\r\n"; outStream.write(contentlength.getBytes()); String alive = "Connection: Keep-Alive\r\n"; outStream.write(alive.getBytes()); String host = "Host: " + url.getHost() + ":" + port + "\r\n"; outStream.write(host.getBytes()); // 写完HTTP请求头后根据HTTP协议再写一个回车换行 outStream.write("\r\n".getBytes()); // 把所有文本类型的实体数据发送出来 outStream.write(textEntity.toString().getBytes()); // 把所有文件类型的实体数据发送出来 for (FormFile uploadFile : files) { StringBuilder fileEntity = new StringBuilder(); fileEntity.append("--"); fileEntity.append(BOUNDARY); fileEntity.append("\r\n"); fileEntity.append("Content-Disposition: form-data;name=\""+ uploadFile.getParameterName()+"\";filename=\""+ name + "\"\r\n"); fileEntity.append("Content-Type: "+ uploadFile.getContentType()+"\r\n\r\n"); outStream.write(fileEntity.toString().getBytes()); if(uploadFile.getInStream()!=null){ byte[] buffer = new byte[1024]; int len = 0; while((len = uploadFile.getInStream().read(buffer, 0, 1024))!=-1){ outStream.write(buffer, 0, len); } uploadFile.getInStream().close(); }else{ outStream.write(uploadFile.getData(), 0, uploadFile.getData().length); } outStream.write("\r\n".getBytes()); } // 下面发送数据结束标志,表示数据已经结束 outStream.write(endline.getBytes()); BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); if (reader.readLine().indexOf("200") == -1) {// 读取web服务器返回的数据,判断请求码是否为200,如果不是200,代表请求失败 return false; } outStream.flush(); outStream.close(); reader.close(); socket.close(); return true; } /* * Java文件操作 获取文件扩展名 * */ public static String getExtensionName(String filename) { if ((filename != null) && (filename.length() > 0)) { int dot = filename.lastIndexOf('.'); if ((dot >-1) && (dot < (filename.length() - 1))) { return filename.substring(dot + 1); } } return filename; } /** * 提交数据到服务器 * * @param path * 上传路径(注:避免使用localhost或127.0.0.1这样的路径测试,因为它会指向手机模拟器,你可以使用http:// * www.itcast.cn或http://192.168.1.10:8080这样的路径测试) * @param params * 请求参数 key为参数名,value为参数值 * @param file * 上传文件 */ public static boolean post(String path, Map<String, String> params, FormFile file) throws Exception { return postSSLSocketFactory(path, params, new FormFile[] { file }); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。