2011-06-30 14 views
0

私はアンドロイドアプリケーションでHTTPSを使用するために多くを試みました。実際に私の仕事は、サーバーからapi呼び出しを行い、authourisationを取得したいと思っています。上記のコードでHTTPSがアンドロイドで実行されます

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

      DefaultHttpClient client = new DefaultHttpClient(); 

      SchemeRegistry registry = new SchemeRegistry(); 
      SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory(); 
      socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier); 
      registry.register(new Scheme("https", socketFactory, 443)); 
      SingleClientConnManager mgr = new SingleClientConnManager(client.getParams(), registry); 
      DefaultHttpClient httpClient = new DefaultHttpClient(mgr, client.getParams()); 

      // Set verifier  
      HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier); 

      // Example send http request 
      final String url = "https://(serveraddress).../"; 
      HttpPost httpPost = new HttpPost(url+ zAPIName); 


      byte[] byteArray = (zUserNameP.trim() + ":" + zPasswordP.trim()).getBytes(); 
      String EncodedString = Base64.encodeBytes(byteArray); 
      httpPost.setHeader("Authorization", "Basic " + EncodedString); 

      httpPost.setEntity(zStringEntityL); 
      HttpResponse aHttpResponseL; 
      aHttpResponseL = client.execute(httpPost); 
      BufferedReader aBufferedReaderL = new BufferedReader(new InputStreamReader(
        aHttpResponseL.getEntity().getContent())); 
      StringBuffer aStringBufferL = new StringBuffer(""); 
      String zLineL = ""; 
      String zLineSeparatorL = System.getProperty("line.separator"); 
      while ((zLineL = aBufferedReaderL.readLine()) != null) { 
       aStringBufferL.append(zLineL + zLineSeparatorL); 
      } 
      aBufferedReaderL.close(); 
      zResponserResultL = aStringBufferL.toString(); 
      aResultL.StatusCode = aHttpResponseL.getStatusLine().getStatusCode(); 
      ResposeMessage aMessageL = new ResposeMessage(); 
      Gson gson = new Gson(); 
      aMessageL = gson.fromJson(zResponserResultL, ResposeMessage.class); 
      aResultL.ResponseString = aMessageL.message;  

私が使用している場合(HTTP) "のhttp://(serverAddressで)... /" その作業罰金が、そのために働いていない(HTTPS)」のhttps://(serverAddressで) .../"私は私たちのサイトで与えられたすべてのソリューションを試してみました。しかし、解決されませんでした。 Plsは私を助ける。

+0

サーバーは実際に*サポート* HTTPSですか?もしそうなら、「働いていない」とはどういう意味ですか?エラーですか?もしそうなら、完全なエラーを投稿してください。 –

+0

はい私のサーバーはHTTPsをサポートしています。私はエラーとして "null"を取得しています。 –

+0

'null'はエラーではなく、戻りコードです。エラーが発生したかどうかを確認するには、logcatを確認してください。もしそうなら、あなたの質問を編集してそれらを完全に含めるようにしてください。 –

答えて

0

これは本当に複雑に見えます...私ははるかに小さい解決策を持っています。私はhttpsでそれを試したことはありませんが、私はこれも動作すると思います。その後、手動で認証ヘッダーを設定する必要はありません

httpClient = new DefaultHttpClient(); 
String user = prefs.getString("http_auth_username", ""); 
String pwd = prefs.getString("http_auth_password", ""); 
httpClient.getCredentialsProvider().setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(user, pwd)); 

はちょうどあなたのHTTPクライアントの資格情報を設定します。

関連する問題