2010-11-20 6 views
8

ご挨拶、私はAndroidアプリを開発し、HTTPS経由で(POSTパラメータで)URLを開くと応答を取得する必要がありますよアンドロイド:HTTPSのURLからの応答を取得

自己署名入りの証明書があるという複雑な問題があります。私もクッキーを受け入れる必要があります。

どこから始めたらよいですか?

多くのありがとう前に、

答えて

3

私はそれを得るために管理されているすべての両方のクッキーをasyncronously作業署名されていないhttps。

私はここのコードを使用:

http://masl.cis.gvsu.edu/2010/04/05/android-code-sample-asynchronous-http-connections/

、ここでブライアンYargerのコードを使用して符号なしのHTTPS用に変更:

Self-signed SSL acceptance on Android

を((実行の先頭に上記のコードを追加します。 )

クッキーを動作させるために、私はいくつかのコードを修正しなければなりませんでした(P HttpConnection.javaからOSTスニペット):方向に私を指しているため誰にでも

  case POST: 
      HttpPost httpPost = new HttpPost(url); 
      httpPost.setEntity(new StringEntity(data)); 
      httpPost.addHeader("Cookie", Cookie.getCookie()); 
      response = httpClient.execute(httpPost); 

      Header[] headers=response.getAllHeaders(); 
      for(int i=0;i<headers.length;i++){ 
       if(headers[i].getName().equalsIgnoreCase("Set-Cookie")){ 
        //Log.i("i",headers[i].getName()+"---"+headers[i].getValue()); 
        Cookie.setCookie(headers[i].getValue()); 
        break; 
       } 
      } 
      break; 

多くのおかげで、

17

Androidには、Apacheのコモンズhttpライブラリが付属しています。 HTTPS POSTリクエストを設定 は非常に簡単です:

HttpPost post = new HttpPost("https://yourdomain.com/yourskript.xyz"); 
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
nameValuePairs.add(new BasicNameValuePair("postValue1", "my Value")); 
nameValuePairs.add(new BasicNameValuePair("postValue2", "2nd Value")); 
post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

HttpClient client = new DefaultHttpClient(); 
HttpResponse response = client.execute(post); 
HttpEntity entity = response.getEntity(); 

String responseText = EntityUtils.toString(entity); 

アンドロイド4.0以下のすべてのバージョンは、そのライフサイクルの外にあるとして、コモンズのHTTPライブラリのバージョン4.xを使用しています。

私はHttpClientをへの自己署名証明書を登録する方法を正確に伝えるが、コモンズのhttpドキュメントが役立ちますmybeすることはできません。

http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html#d4e506

+0

こんにちは、お返事に感謝。それは正常に動作しています。署名されていない証明書を動作させることはできません。また、コードをどのように非同期で動作させることができるかについてのアイデアはありますか?私は応答を待っている間UIがぶら下がっていることを望んでいません。 – Eamorr

+1

Davidは言ったように、新しいスレッドを開始して、http postアクションをrunメソッドに入れなければなりません。アンドロイドハンドラシステムを使用すると、スレッド間でデータを交換できます。 Androidの基本ページ(http://developer.android.com/guide/topics/fundamentals.html#threads)をご覧ください。 – marcus

関連する問題