Сообщение Https работает на эмуляторе Android, но не работает в устройстве - PullRequest
3 голосов
/ 06 марта 2012

Я пытаюсь опубликовать данные в URL Https, используя приведенный ниже код. Я зарегистрировался эмулятор работает нормально. Но это не работает в устройстве. Можно кто-нибудь, пожалуйста, помогите мне.

  public Boolean PostData(String data) throws IOException {
  Boolean response = false;
  TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
    @Override
    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
      return null;
    }

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

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

  // Install the all-trusting trust manager
  try {
    SSLContext sc = SSLContext.getInstance("TLS");
    sc.init(null, trustAllCerts, new java.security.SecureRandom());

    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
  } catch (Exception e) {
  }


  HostnameVerifier hostnameVerifier =
      org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;


  SchemeRegistry registry = new SchemeRegistry();
  SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
  socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);
  registry.register(new Scheme("https", socketFactory, 443));

  // Set verifier
  StringBuilder postDataBuilder = new StringBuilder();
  postDataBuilder.append("data").append("=").append(data);
  byte[] postData = postDataBuilder.toString().getBytes("UTF-8");

  URL postURL = new URL(url);

  HttpsURLConnection conn = (HttpsURLConnection) postURL.openConnection();
  conn.setDoOutput(true);
  conn.setUseCaches(false);
  HttpsURLConnection.setDefaultHostnameVerifier(new CustomizedHostnameVerifier());
  conn.setRequestMethod("POST");
  conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
  conn.setRequestProperty("Content-Length", Integer.toString(postData.length));

  // ------------------
  OutputStream out = conn.getOutputStream();
  // --------------------------
  out.write(postData);
  out.close();

  return response;
}

private static class CustomizedHostnameVerifier implements HostnameVerifier {
  @Override
  public boolean verify(String hostname, SSLSession session) {
    return true;
  }
}

Есть ли способ получить ответ на этот URL после того, как мы опубликовать данные.

Спасибо, Махеш

1 Ответ

0 голосов
/ 06 марта 2012

Использовали ли вы разрешение ИНТЕРНЕТ?

Вы должны добавить в свой файл манифеста:

<uses-permission android:name="android.permission.INTERNET" /> 

(Интернет отлично работает с эмулятора, но если вы хотите использовать его на реальном устройстве, вы должны использовать разрешение)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...