아래 코드를 사용하여 데이터를 Https URL에 게시하려고합니다. 나는 에뮬레이터에서 잘 작동하는지 확인했다. 하지만 Device에서 작동하지 않습니다. 누군가 나를 도와주세요 수 있습니까.Https 게시물이 Android 에뮬레이터에서 작동하지만 기기에서 작동하지 않습니다.
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에 표시되는 응답을 얻을 방법이 있나요.
덕분에, 마헤
.. 왜 DefaultHttpClient를 만들고 있습니까? 당신이 그것을 사용하는 것과는 다릅니다. – Jens
httpclient를 사용하여 HTTP url에 게시하는 데 사용한 이전 버전의 Actaully. 이제 서버가 https에 있었고 변경 작업을 수행 한 결과 제거하지 못했습니다. – mahesh