Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
针对android的带SSL的Https请求_Android - Fatal编程技术网

针对android的带SSL的Https请求

针对android的带SSL的Https请求,android,Android,对于android开发,如何使用SSL证书发送https请求?>尝试使用TrustManagerImpulator类: > Try using TrustManagerManipulator Class: try { TrustManagerManipulator.allowAllSSL(); try {

对于android开发,如何使用SSL证书发送https请求?

>尝试使用TrustManagerImpulator类:
    >     Try using TrustManagerManipulator Class:




              try {
                                TrustManagerManipulator.allowAllSSL();
                                try {
                                    SoapObject request = new SoapObject(Data.NAMESPACE,
                                            methodName);

                                    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                                            SoapEnvelope.VER11);

                                    if (methodName.equals(Data.DOPAYMENT))

                                    {
                                        request.addProperty("firstname", param1);
                                        request.addProperty("lastName", param2);

                envelope.dotNet = true;
                                envelope.setOutputSoapObject(request);
                                envelope.env = "http://schemas.xmlsoap.org/soap/envelope/";
                                TrustManagerManipulator.allowAllSSL();
                                System.setProperty("http.keepAlive", "false");

                                HttpTransportSE androidHttpTransport = new HttpTransportSE(
                                        Data.URL_BASE);
                                androidHttpTransport
                                        .setXmlVersionTag("<?xml version=\"1.0\" encoding=\"utf-8\"?>");

                                try {
                                    androidHttpTransport.call(Data.SOAP_ACTION,
                                            envelope);
                                } catch (Exception e) {
                                    e.printStackTrace();
                                    Toast.makeText(context, "Network failed!",
                                            Toast.LENGTH_LONG).show();
                                    dismissDialog();
                                }
                                SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn;
                                String responseLocal = resultsRequestSOAP.toString();
                                responseXML = (String) resultsRequestSOAP
                                        .getProperty(0);
                                Log.v("responseXML0::", "" + responseXML);

                                Log.v("responseSTR", "" + responseLocal);




///////////////////////////////////

> TrustManagerManipulator Class


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 TrustManagerManipulator implements X509TrustManager {


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

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

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

    public static void allowAllSSL() 
    {

        HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
            public boolean verify(String hostname, SSLSession session) {
                return true;
            }
        });
        SSLContext context = null;
        if (trustManagers == null) {
            trustManagers = new TrustManager[] { new TrustManagerManipulator() };
        }
        try {
            context = SSLContext.getInstance("TLS");
            context.init(null, trustManagers, new SecureRandom());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        }
        HttpsURLConnection.setDefaultSSLSocketFactory(context
                .getSocketFactory());
    }

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

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

    public X509Certificate[] getAcceptedIssuers() {
        return acceptedIssuers;
    }
}
试一试{ trustmanagermaniplator.allowAllSSL(); 试一试{ SoapObject请求=新的SoapObject(Data.NAMESPACE, 方法名称); SoapSerializationEnvelope=新的SoapSerializationEnvelope( 第11版); if(methodName.equals(Data.DOPAYMENT)) { request.addProperty(“firstname”,param1); request.addProperty(“lastName”,param2); envelope.dotNet=true; envelope.setOutputSoapObject(请求); envelope.env=”http://schemas.xmlsoap.org/soap/envelope/"; trustmanagermaniplator.allowAllSSL(); set属性(“http.keepAlive”、“false”); HttpTransportSE androidHttpTransport=新HttpTransportSE( 数据。URL(U库); androidHttpTransport .setXmlVersionTag(“”); 试一试{ androidHttpTransport.call(Data.SOAP\u操作, 信封); }捕获(例外e){ e、 printStackTrace(); Toast.makeText(上下文“网络失败!”, Toast.LENGTH_LONG).show(); dismissDialog(); } SoapObject resultsRequestSOAP=(SoapObject)envelope.bodyIn; String responseLocal=resultsRequestSOAP.toString(); responseXML=(字符串)resultsRequestSOAP .getProperty(0); Log.v(“responseXML0::”,“”+responseXML); Log.v(“responsest”和“+responseLocal”); /////////////////////////////////// >TrustManagerImpulator类 导入java.security.KeyManagementException; 导入java.security.NoSuchAlgorithmException; 导入java.security.SecureRandom; 导入java.security.cert.CertificateException; 导入java.security.cert.x509证书; 导入javax.net.ssl.HostnameVerifier; 导入javax.net.ssl.HttpsURLConnection; 导入javax.net.ssl.SSLContext; 导入javax.net.ssl.SSLSession; 导入javax.net.ssl.TrustManager; 导入javax.net.ssl.X509TrustManager; 公共类TrustManager安装程序实现X509TrustManager{ 私有静态信任管理器[]信任管理器; 私有静态最终X509Certificate[]acceptedIssuers=新X509Certificate[]{}; 公共布尔值IsClient受信任(X509Certificate[]链){ 返回true; } 公共布尔值isServerTrusted(X509Certificate[]链){ 返回true; } 公共静态void allowAllSSL() { HttpsURLConnection.setDefaultHostnameVerifier(新的HostnameVerifier(){ 公共布尔验证(字符串主机名、SSLSession会话){ 返回true; } }); SSLContext context=null; if(trustManagers==null){ trustManagers=new TrustManager[]{new trustmanagermaniplator()}; } 试一试{ context=SSLContext.getInstance(“TLS”); init(null,trustManagers,new SecureRandom()); }捕获(无算法异常){ e、 printStackTrace(); }捕获(密钥管理异常e){ e、 printStackTrace(); } HttpsURLConnection.setDefaultSSLSocketFactory(上下文 .getSocketFactory()); } public void checkClientTrusted(X509Certificate[]链,字符串authType) 抛出证书异常{ } public void checkServerTrusted(X509Certificate[]链,字符串authType) 抛出证书异常{ } 公共X509证书[]getAcceptedIssuers(){ 退货承兑人; } }
如果你不介意的话,你可以问谷歌吗?我们可以发送请求而不从客户端添加密钥吗?这意味着大多数实现都说使用证书文件生成密钥库。如果没有,还有什么方法吗?/是的,有一个代码可以用于发送http请求。请查看。在这里你可以找到你的解决方案。