Volley访问HTTPS
来源:互联网 发布:如何破解mac迅雷限速 编辑:程序博客网 时间:2024/05/19 17:02
Volley 获取请求队列的静态方法
外部可以实现支持https的 HttpStack
如果不为空 就用我们自定义的httpstack构造 Network
如果为null 就用默认的 当版本小于9 用HttpClient
大于9的 用HttpUrlConnection 链接
<span style="font-size:18px;"> public static RequestQueue newRequestQueue(Context context, HttpStack stack) { File cacheDir = new File(context.getCacheDir(), DEFAULT_CACHE_DIR); String userAgent = "volley/0"; try { String packageName = context.getPackageName(); PackageInfo info = context.getPackageManager().getPackageInfo(packageName, 0); userAgent = packageName + "/" + info.versionCode; } catch (NameNotFoundException e) { } if (stack == null) { if (Build.VERSION.SDK_INT >= 9) { stack = new HurlStack(); } else { // Prior to Gingerbread, HttpUrlConnection was unreliable. // See: http://android-developers.blogspot.com/2011/09/androids-http-clients.html stack = new HttpClientStack(AndroidHttpClient.newInstance(userAgent)); } } Network network = new BasicNetwork(stack); RequestQueue queue = new RequestQueue(new DiskBasedCache(cacheDir), network); queue.start(); return queue; }</span>
下面是从demo拿来修改一些
<span style="font-size:18px;">public class EasySSLSocketFactory implements LayeredSocketFactory { private SSLContext sslcontext = null; private boolean isConnectingYourServer = true; private static Context mContext; public EasySSLSocketFactory(boolean isConnectingToGoinoutServer,Context context) {</span>
<span style="font-size:18px;"> this.isConnectingYourServer = isConnectingToGoinoutServer; this.mContext=context; } private static SSLContext createEasySSLContext() throws IOException { try { InputStream clientStream = mContext.getResources().openRawResource(R.raw.client); char[] password = "123456".toCharArray(); KeyStore keyStore = KeyStore.getInstance("PKCS12"); keyStore.load(clientStream, password); KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); keyManagerFactory.init(keyStore, password); KeyStore trustStore = KeyStore.getInstance("BKS"); CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");// trustStore.load(null); InputStream instream = null; instream = mContext.getResources().openRawResource(R.raw.success);// trustStore.setCertificateEntry("dd", certificateFactory.generateCertificate(instream)); try { trustStore.load(instream, "123456".toCharArray()); } catch (Exception e) { e.printStackTrace(); } finally { try { instream.close(); } catch (Exception ignore) {} } String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm); tmf.init(trustStore); SSLContext context = SSLContext.getInstance("TLS"); context.init(keyManagerFactory.getKeyManagers(), tmf.getTrustManagers(), new SecureRandom()); return context; } catch (Exception e) { e.printStackTrace(); throw new IOException(e.getMessage()); } } private static SSLContext createIgnoreSSLContext() throws IOException { try { SSLContext context = SSLContext.getInstance("TLS"); context.init(null, new TrustManager[]{new IgnoreCertTrustManager()}, null); return context; } catch (Exception e) { e.printStackTrace(); throw new IOException(e.getMessage()); } } private SSLContext getSSLContext() throws IOException { if (this.sslcontext == null) { if(isConnectingYourServer) { this.sslcontext = createEasySSLContext(); } else { //Ignore the Certificate Authority check if not connecting to your server. this.sslcontext = createIgnoreSSLContext(); } } return this.sslcontext; } public Socket connectSocket(Socket sock, String host, int port, InetAddress localAddress, int localPort, HttpParams params) throws IOException, UnknownHostException, ConnectTimeoutException { int connTimeout = HttpConnectionParams.getConnectionTimeout(params); int soTimeout = HttpConnectionParams.getSoTimeout(params); InetSocketAddress remoteAddress = new InetSocketAddress(host, port); SSLSocket sslsock = (SSLSocket) ((sock != null) ? sock : createSocket()); if ((localAddress != null) || (localPort > 0)) { // we need to bind explicitly if (localPort < 0) { localPort = 0; // indicates "any" } InetSocketAddress isa = new InetSocketAddress(localAddress, localPort); sslsock.bind(isa); } sslsock.connect(remoteAddress, connTimeout); sslsock.setSoTimeout(soTimeout); return sslsock; } public Socket createSocket() throws IOException { return getSSLContext().getSocketFactory().createSocket(); } public boolean isSecure(Socket socket) throws IllegalArgumentException { return true; } public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException { return getSSLContext().getSocketFactory().createSocket(socket, host, port, autoClose); } public boolean equals(Object obj) { return ((obj != null) && obj.getClass().equals( EasySSLSocketFactory.class)); } public int hashCode() { return EasySSLSocketFactory.class.hashCode(); }}</span>
isConnectingYourServer true 证书验证
false 忽略证书验证
<span style="font-size:18px;"> private SSLContext getSSLContext() throws IOException { if (this.sslcontext == null) { if(isConnectingYourServer) { this.sslcontext = createEasySSLContext(); } else { //Ignore the Certificate Authority check if not connecting to your server. this.sslcontext = createIgnoreSSLContext(); } } return this.sslcontext;</span>
<span style="font-size:18px;">public class IgnoreCertTrustManager implements X509TrustManager { @Override public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { } @Override public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { } @Override public X509Certificate[] getAcceptedIssuers() { return null; }}</span>
自定义HttpStack
<span style="font-size:18px;">public class SslHttpStack implements HttpStack { private boolean mIsConnectingToYourServer = false; private final static String HEADER_CONTENT_TYPE = "Content-Type"; private Context mContext; public SslHttpStack(boolean isYourServer,Context context) { mIsConnectingToYourServer = isYourServer; mContext=context; } private static void addHeaders(HttpUriRequest httpRequest, Map<String, String> headers) { for (String key : headers.keySet()) { httpRequest.setHeader(key, headers.get(key)); } } @SuppressWarnings("unused") private static List<NameValuePair> getPostParameterPairs(Map<String, String> postParams) { List<NameValuePair> result = new ArrayList<NameValuePair>(postParams.size()); for (String key : postParams.keySet()) { result.add(new BasicNameValuePair(key, postParams.get(key))); } return result; } @Override public HttpResponse performRequest(Request<?> request, Map<String, String> additionalHeaders) throws IOException, AuthFailureError { HttpUriRequest httpRequest = createHttpRequest(request, additionalHeaders); addHeaders(httpRequest, additionalHeaders); addHeaders(httpRequest, request.getHeaders()); onPrepareRequest(httpRequest); HttpParams httpParams = httpRequest.getParams(); int timeoutMs = request.getTimeoutMs(); HttpConnectionParams.setConnectionTimeout(httpParams, 5000); HttpConnectionParams.setSoTimeout(httpParams, timeoutMs); SchemeRegistry registry = new SchemeRegistry(); registry.register(new Scheme("http", new PlainSocketFactory(), 80)); registry.register(new Scheme("https", new EasySSLSocketFactory(mIsConnectingToYourServer,mContext), 443)); ThreadSafeClientConnManager manager = new ThreadSafeClientConnManager(httpParams, registry); HttpClient httpClient = new DefaultHttpClient(manager, httpParams); return httpClient.execute(httpRequest); } /** * Creates the appropriate subclass of HttpUriRequest for passed in request. */ @SuppressWarnings("deprecation") /* protected */ static HttpUriRequest createHttpRequest(Request<?> request, Map<String, String> additionalHeaders) throws AuthFailureError { switch (request.getMethod()) { case Method.DEPRECATED_GET_OR_POST: { // This is the deprecated way that needs to be handled for backwards compatibility. // If the request's post body is null, then the assumption is that the request is // GET. Otherwise, it is assumed that the request is a POST. byte[] postBody = request.getPostBody(); if (postBody != null) { HttpPost postRequest = new HttpPost(request.getUrl()); postRequest.addHeader(HEADER_CONTENT_TYPE, request.getPostBodyContentType()); HttpEntity entity; entity = new ByteArrayEntity(postBody); postRequest.setEntity(entity); return postRequest; } else { return new HttpGet(request.getUrl()); } } case Method.GET: return new HttpGet(request.getUrl()); case Method.DELETE: return new HttpDelete(request.getUrl()); case Method.POST: { HttpPost postRequest = new HttpPost(request.getUrl()); postRequest.addHeader(HEADER_CONTENT_TYPE, request.getBodyContentType()); setMultiPartBody(postRequest,request); setEntityIfNonEmptyBody(postRequest, request); return postRequest; } case Method.PUT: { HttpPut putRequest = new HttpPut(request.getUrl()); putRequest.addHeader(HEADER_CONTENT_TYPE, request.getBodyContentType()); setMultiPartBody(putRequest,request); setEntityIfNonEmptyBody(putRequest, request); return putRequest; } // Added in source code of Volley libray.// case Method.PATCH: {// HttpPatch patchRequest = new HttpPatch(request.getUrl());// patchRequest.addHeader(HEADER_CONTENT_TYPE, request.getBodyContentType());// setEntityIfNonEmptyBody(patchRequest, request);// return patchRequest;// } default: throw new IllegalStateException("Unknown request method."); } } private static void setEntityIfNonEmptyBody(HttpEntityEnclosingRequestBase httpRequest, Request<?> request) throws AuthFailureError { byte[] body = request.getBody(); if (body != null) { HttpEntity entity = new ByteArrayEntity(body); httpRequest.setEntity(entity); } } private static void setMultiPartBody(HttpEntityEnclosingRequestBase httpRequest, Request<?> request) throws AuthFailureError { // Return if Request is not MultiPartRequest if(request instanceof MultiPartRequest == false) { return; } MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); Map<String,File> fileUpload = ((MultiPartRequest)request).getFileUploads(); for (Map.Entry<String, File> entry : fileUpload.entrySet()) { System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); multipartEntity.addPart(((String)entry.getKey()), new FileBody((File)entry.getValue())); } Map<String,String> stringUpload = ((MultiPartRequest)request).getStringUploads(); for (Map.Entry<String, String> entry : stringUpload.entrySet()) { System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); try { multipartEntity.addPart(((String)entry.getKey()), new StringBody((String)entry.getValue())); } catch (Exception e) { e.printStackTrace(); } } httpRequest.setEntity(multipartEntity); } /** * Called before the request is executed using the underlying HttpClient. * * <p>Overwrite in subclasses to augment the request.</p> */ protected void onPrepareRequest(HttpUriRequest request) throws IOException { // Nothing. }}</span>
<span style="font-size:18px;">RequestQueue requestQueue= Volley.newRequestQueue(context, new SslHttpStack(true, context));StringRequest s= new StringRequest(Request.Method.GET, "https://localhost:8443/123.html", new Listener<String>() {@Overridepublic void onResponse(String arg0) {Log.e("success", arg0);}}, new Response.ErrorListener() {@Overridepublic void onErrorResponse(VolleyError arg0) {Log.e("erro", arg0.toString());}}); requestQueue.add(s);} </span>
0 0
- Volley访问HTTPS
- android使用volley框架访问https
- Volley + https
- Volley的Https请求
- 8.18 volley使用https
- Volley之https相关
- Volley的Https请求
- Volley支持https请求
- volley official https://github.com/google/volley
- Volley框架支持HTTPS请求。
- Volley框架支持HTTPS请求
- Volley框架支持HTTPS请求。
- Android 当Volley遇到Https
- Android 网络--Volley+OkHttp+Https
- Android 网络: Volley+OkHttp+Https
- Volley Https证书不信任解决方案
- Volley的https的使用
- Android Volley网络访问
- 学习网站记录
- 2015最受欢迎的Java EE容器
- Android OkHttp完全解析
- java 移位运算符,取反运算符 >> << >>> ~ , java 负数补码存放规则等同于机器存储
- weblogic 报错(StuckThreadMaxTime) of "600" seconds
- Volley访问HTTPS
- Android网络图片处理——Picasso与HttpUrlConnection比较
- MVC设计模式
- Android附近基站+Wifi+IP+GPS多渠道定位方案
- java 数据类型所占字节数,int char
- DASH Adaptive Streaming for HTML 5 Video
- 上传图片到图片服务器,base64转图片
- SQL SERVER 数据库-增-删-改-查
- hive 元数据 mysql-1