2012-03-06 15 views
3

下記のコードを使用して、データをHttps URLに投稿しようとしています。私は エミュレータでうまく動作していることを確認しました。しかし、それはデバイスで動作していません。 誰かが私を助けてくれる?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

前バージョンのActaully私はHTTPクライアントにHTTP URLを使用して投稿していました。今サーバはhttpsに入っていて、私は変更を加えたので、削除するのを忘れました。 – mahesh

答えて

0

あなたは、インターネットのアクセス許可を使用することがありますか?

はあなたのマニフェストファイルに追加する必要があります。

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

(インターネットエミュレータから正常に動作していますが、実際のデバイス上でそれを使用したい場合は、許可を使用する必要があります)だから、

+0

はい私はそれを使用しました。 – mahesh

+0

あなたのコンピュータや外部サーバー上のページを解析していますか? – ArcDare

+0

を外部サーバーに送信します。 – mahesh

関連する問題