访问https webservice总结

本文介绍了如何使用ksoap2和Okhttp库在Android中进行HTTPS调用WebService。通过示例代码展示了如何设置请求参数、信任所有SSL证书,并获取响应数据。
ksoap2访问方式
        new Thread(new Runnable() {
            @Override
            public void run() {
                String namespace = "http://tempuri.org/";//namespace
                String methodName = "getTelFrom";//要调用的方法名称  用于确定手机归属地
                SoapObject request = new SoapObject("http://tempuri.org/", "getTelFrom");
                request.addProperty("param", "whxs|0000000031072121|64d51414511721c1417495|64a5b4744167|121");//参数
                request.addProperty("value", "18636956898");//手机号
                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapSerializationEnvelope.VER11);
                envelope.bodyOut = request;
                envelope.dotNet = true;
                HttpsTransportSE httpTransportSE =  new HttpsTransportSE("webservice4.vcyber.cn", 443, "/MemberService/UserInfoService.asmx", 15000);
                SslRequest.allowAllSSL();//无需证书
                try {
                    httpTransportSE.call(namespace+methodName, envelope);
                    SoapObject response = (SoapObject) envelope.getResponse();//获得返回对象
                    if(response!=null){
                        Log.e("WM", response.toString());
                        Log.e("WM", response.getName());
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (XmlPullParserException e) {
                    e.printStackTrace();
                }
            }
        }).start();
SslRequest.java
        new Thread(new Runnable() {
            @Override
            public void run() {
                String namespace = "http://tempuri.org/";//namespace
                String methodName = "getTelFrom";//要调用的方法名称  用于确定手机归属地
                SoapObject request = new SoapObject("http://tempuri.org/", "getTelFrom");
                request.addProperty("param", "whxs|0000000031072121|64d51414511721c1417495|64a5b4744167|121");//参数
                request.addProperty("value", "18636956898");//手机号
                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapSerializationEnvelope.VER11);
                envelope.bodyOut = request;
                envelope.dotNet = true;
                HttpsTransportSE httpTransportSE =  new HttpsTransportSE("webservice4.vcyber.cn", 443, "/MemberService/UserInfoService.asmx", 15000);
                SslRequest.allowAllSSL();//无需证书
                try {
                    httpTransportSE.call(namespace+methodName, envelope);
                    SoapObject response = (SoapObject) envelope.getResponse();//获得返回对象
                    if(response!=null){
                        Log.e("WM", response.toString());
                        Log.e("WM", response.getName());
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (XmlPullParserException e) {
                    e.printStackTrace();
                }
            }
        }).start();	package com.qxc.ksoap;

	import java.security.KeyManagementException;
	import java.security.NoSuchAlgorithmException;
	import java.security.SecureRandom;
	import java.security.cert.CertificateException;
	import java.security.cert.X509Certificate;

	import javax.net.ssl.HostnameVerifier;
	import javax.net.ssl.HttpsURLConnection;
	import javax.net.ssl.SSLContext;
	import javax.net.ssl.SSLSession;
	import javax.net.ssl.TrustManager;
	import javax.net.ssl.X509TrustManager;

	public class SslRequest implements X509TrustManager {

	    private static TrustManager[] trustManagers;
	    private static final X509Certificate[] _AcceptedIssuers = new
	            X509Certificate[]{};

	    @Override
	    public void checkClientTrusted(X509Certificate[] chain, String
	            authType) throws CertificateException {
	    }

	    @Override
	    public void checkServerTrusted(X509Certificate[] chain, String
	            authType) throws CertificateException {
	    }

	    public boolean isClientTrusted(X509Certificate[] chain) {
	        return true;
	    }

	    public boolean isServerTrusted(X509Certificate[] chain) {
	        return true;
	    }

	    @Override
	    public X509Certificate[] getAcceptedIssuers() {
	        return _AcceptedIssuers;
	    }

	    public static void allowAllSSL() {
	        HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
	            @Override
	            public boolean verify(String hostname, SSLSession session) {
	                return true;
	            }

	        });

	        SSLContext context = null;
	        if (trustManagers == null) {
	            trustManagers = new TrustManager[]{new SslRequest()};
	        }

	        try {
	            context = SSLContext.getInstance("TLS");
	            context.init(null, trustManagers, new SecureRandom());
	        } catch (NoSuchAlgorithmException e) {
	            e.printStackTrace();
	        } catch (KeyManagementException e) {
	            e.printStackTrace();
	        }

//	        HttpsURLConnection.setDefaultSSLSocketFactory(new MySSLSocketFactory(context.getSocketFactory()));
	        HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
	    }
	}

Okhttp访问
 new Thread(new Runnable() {
            @Override
            public void run() {

//                OkHttpClient okHttpClient = null;
//                try {
////                    trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
////                    trustManagerFactory.init((KeyStore) null);
////                    TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
////                    if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
////                        throw new IllegalStateException("Unexpected default trust managers:"
////                                + Arrays.toString(trustManagers));
////                    }
////                    X509TrustManager trustManager = (X509TrustManager) trustManagers[0];
//                    TrustManager[] trustManagers=null;
//                    if (trustManagers == null) {
//                        trustManagers = new TrustManager[]{new SslRequest()};
//                    }
//                    SSLContext sslContext = SSLContext.getInstance("TLS");
//                    sslContext.init(null,  trustManagers , new SecureRandom());
//                    SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
//                    okHttpClient = new OkHttpClient.Builder()
//                            .sslSocketFactory(sslSocketFactory, (SslRequest)trustManagers[0]).build();
//                } catch (NoSuchAlgorithmException e) {
//                    e.printStackTrace();
//                } catch (KeyManagementException e) {
//                    e.printStackTrace();
//                }


//                TrustManagerFactory trustManagerFactory = null;
//                try {
//                    trustManagerFactory = TrustManagerFactory.getInstance(
//                                   TrustManagerFactory.getDefaultAlgorithm());
//                    trustManagerFactory.init((KeyStore) null);
//                    TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
//                    if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
//                        throw new IllegalStateException("Unexpected default trust managers:"
//                                + Arrays.toString(trustManagers));
//                    }
//                    X509TrustManager trustManager = (X509TrustManager) trustManagers[0];
//
//                    SSLContext sslContext = SSLContext.getInstance("TLS");
//                    sslContext.init(null, new TrustManager[] { trustManager }, null);
//                    SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
//
//                    okHttpClient = new OkHttpClient.Builder()
//                            .sslSocketFactory(sslSocketFactory, trustManager).build();
//                } catch (NoSuchAlgorithmException e) {
//                    e.printStackTrace();
//                } catch (KeyStoreException e) {
//                    e.printStackTrace();
//                } catch (KeyManagementException e) {
//                    e.printStackTrace();
//                }


                OkHttpClient okHttpClient = new OkHttpClient();
                HashMap<String, String> hashMap = new HashMap<>();
//                hashMap.put("User-Agent", "kSOAP/2.0");
//                hashMap.put("SOAPAction", "http://tempuri.org/getTelFrom");
//                hashMap.put("Host", "webservice4.vcyber.cn");
                Headers headers = Headers.of(hashMap);
//        RequestBody requestBody = new FormBody.Builder().build();
//                RequestBody requestBody = RequestBody.create(MediaType.parse("text/xml"), "<v:Envelope xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:d=\"http://www.w3.org/2001/XMLSchema\" xmlns:c=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:v=\"http://schemas.xmlsoap.org/soap/envelope/\"><v:Header /><v:Body><getTelFrom xmlns=\"http://tempuri.org/\" id=\"o0\" c:root=\"1\"><param i:type=\"d:string\">whxs|0000000031072121|64d51414511721c1417495|64a5b4744167|121</param><value i:type=\"d:string\">18636956898</value></getTelFrom></v:Body></v:Envelope>");
//                Request request = new Request.Builder().headers(headers).url("https://webservice4.vcyber.cn/MemberService/UserInfoService.asmx").post(requestBody).build();
                Request request = new Request.Builder().url("https://kyfw.12306.cn/otn/").build();
                okHttpClient.newCall(request).enqueue(new Callback() {
                    @Override
                    public void onFailure(Call call, IOException e) {
                        Log.e("WM", "" + e);
                    }

                    @Override
                    public void onResponse(Call call, Response response) throws IOException {
                        Log.e("WM", response.body().string());
                    }
                });
            }
        }).start();




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值