2012-03-06 2 views
3

아래 코드를 사용하여 데이터를 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에 표시되는 응답을 얻을 방법이 있나요.

덕분에, 마헤

+0

.. 왜 DefaultHttpClient를 만들고 있습니까? 당신이 그것을 사용하는 것과는 다릅니다. – Jens

+0

httpclient를 사용하여 HTTP url에 게시하는 데 사용한 이전 버전의 Actaully. 이제 서버가 https에 있었고 변경 작업을 수행 한 결과 제거하지 못했습니다. – mahesh

답변

0

는 인터넷 권한을 사용 했습니까?

당신은 매니페스트 파일에 추가해야합니다 :

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

(인터넷 에뮬레이터에서 잘 작동하지만 당신은 실제 장치에 사용하려는 경우에는 권한을 사용해야합니다) 그래서

+0

예 그것을 사용했습니다. – mahesh

+0

그리고 컴퓨터 또는 외부 서버에있는 페이지를 구문 분석하고 있습니까? – ArcDare

+0

을 외부 서버에 보냅니다. – mahesh

관련 문제