2017-02-02 2 views
0

Я пытаюсь создать приложение Android, в котором я звоню на сервер HTTPS. Я знаю, как вызвать HTTP, но я не могу назвать HTTPS-сервер. Мой код показан ниже:Как я могу назвать веб-службу мыла HTTPS в Android

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener { 

    Spinner spinner; 
    Button send; 
    EditText number, comments; 
    String dropdown; 
    TextView feedbackText; 
    private static final String[] paths = {"About Test Center", "About Mobile App"}; 

    final private static String URL = "https://122.180.25.2/TempWS/WebServices/WebService1.asmx"; 
    final private static String METHOD_NAME = "RegisterComplaint"; 
    final private static String NAMESPACE = "https://122.180.25.2/"; 
    final private static String SOAP_ACTION = "https://122.180.25.2/RegisterComplaint"; 

    @Override 
    protected void onCreate (Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     setTitle("Feedback"); 
     send = (Button) findViewById(R.id.button7); 
     number = (EditText) findViewById(R.id.editText); 
     comments = (EditText) findViewById(R.id.editText2); 
     feedbackText = (TextView) findViewById(R.id.textView2); 

     spinner = (Spinner) findViewById(R.id.spinner); 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, 
       android.R.layout.simple_spinner_item, paths); 

     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner.setAdapter(adapter); 
     spinner.setOnItemSelectedListener(this); 

     send.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       new AsyncFeedback().execute(); 
      } 
     }); 
    } 

public void onItemSelected(AdapterView<?> parent, View v, int position, long id) { 

    switch (position) { 
     case 0: 
      dropdown = "About Test Center"; 
      break; 
     case 1: 
      dropdown = "About Mobile App"; 
      break; 
    } 
} 

@Override 
public void onNothingSelected(AdapterView<?> parent) { 
} 

public class AsyncFeedback extends AsyncTask<Void, Void, String> { 

    String resp; 
    String Number = number.getText().toString(); 
    String Comments = comments.getText().toString(); 

    @Override 
    protected String doInBackground(Void... params) { 

     try { 
      SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
      //request.addProperty("topic",dropdown); 
      request.addProperty("sender", Number); 
      request.addProperty("topic", dropdown); 
      request.addProperty("CompDetails", Comments); 
      //request.addProperty("details",Comments); 

      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
      envelope.setOutputSoapObject(request); 
      envelope.dotNet = true; 
      try { 
       HttpTransportSE transportSE = new HttpTransportSE(URL); 
       transportSE.call(SOAP_ACTION, envelope); 

       SoapObject result = (SoapObject) envelope.bodyIn; 

       resp = result.toString(); 

      } catch (SocketTimeoutException e) { 
       e.printStackTrace(); 
      } catch (XmlPullParserException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return resp; 
    } 

    public void onPostExecute(String result) { 
     dropdown = null; 
     number.setText(""); 
     comments.setText(""); 
     feedbackText.setText(result); 
    } 
} 
} 

LogCat показано ниже:

Click here to view the image of logcat

Любая помощь будет оценена. Я хочу, чтобы этот код работал (как звонить HTTPS). Спасибо!!

+0

Вам нужно знать SSLCertificate, если он меняется один раз в то время, иначе вы можете обойти его с помощью X509TrustManager и SSLContext, чтобы доверять всем сертификатам. – Mike

+0

@Mike Как я могу это сделать? Я новичок в этом. – Nair123

+0

Подождите, я могу поделиться с вами своим ответом, но это что-то сделано с REST not SOAP – Mike

ответ

-1

@ Nair123 Это REST на основе ответа, но это фрагмент кода, я использовал, чтобы заставить его доверять все сертификаты

X509TrustManager trust; 
// Create a trust manager that does not validate certificate chains 
final TrustManager[] trustAllCerts = new TrustManager[]{ 
     trust = new X509TrustManager() { 
      @Override 
      public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) {} 

      @Override 
      public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) {} 

      @Override 
      public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
       return new java.security.cert.X509Certificate[]{}; 
      } 
     } 
}; 

// Install the all-trusting trust manager 
final SSLContext sslContext = SSLContext.getInstance("SSL"); 
sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); 

Добавить указанный SSLContext вашему SSLSocketFactory таким образом, что .sslSocketFactory(sslContext.getSocketFactory(), trust)

+0

ВНИМАНИЕ: Не используйте это в производственном коде, который вы когда-либо собираетесь использовать в сети, которой вы не полностью доверяете – Markus

 Смежные вопросы

  • Нет связанных вопросов^_^