2011-11-12 19 views
4

私はHTTPSエンドポイントを介してGETリクエストをしようとしています、私は必要とされている特別な処理があるかどうかわからないけど、以下の私のコードです:httpクライアント経由でhttps取得リクエストを実行する方法は?

String foursquareURL = "https://api.foursquare.com/v2/venues/search?ll=" + latitude + "," + longitude + "&client_id="+CLIENT_ID+"&client_secret="+CLIENT_SECRET; 
      System.out.println("Foursquare URL is " + foursquareURL); 


try { 
       Log.v("HttpClient", "Preparing to create a request " + foursquareURL); 
       URI foursquareURI = new URI(foursquareURL); 
       HttpClient httpclient = new DefaultHttpClient(); 
       HttpResponse response = httpclient.execute(new HttpGet(foursquareURI)); 
       content = response.getEntity().getContent(); 
       BufferedReader br = new BufferedReader(new InputStreamReader(content)); 
       String strLine; 
       String result = ""; 
       while ((strLine = br.readLine()) != null) { 
         result += strLine; 
       } 

       //editTextShowLocation.setText(result); 
       Log.v("result of the parser is", result); 

       } catch (Exception e) { 
        Log.v("Exception", e.getLocalizedMessage()); 
       } 
+0

これは何を意味していますか? –

+0

api.foursquare.comという例外を常に襲い、プロトコル – adit

+0

でサポートされていないアドレスファミリにはHTTPSとは何の関係もありません(遠方のサーバ証明書は別の話であるAndroidによるaccepterです)。問題はHTTPS固有の問題ですか? HTTPSの有無にかかわらず、別のURLで試してみましたか? – Thierry

答えて

0

この場合、私はわからないんだけどアプローチはAndroid上で動作しますが、HTTPS URLを使用してHttpClientを使用するサーバーサイドJavaでも同じ問題が発生しました。最初に、クラスEasySSLProtocolSocketFactoryの実装を独自のコードベースにコピー/適合させました。私たちは、その後で私たちの新しいのHttpClientインスタンスを作成し、代わりにそのクラスに

http://svn.apache.org/viewvc/httpcomponents/oac.hc3x/trunk/src/contrib/org/apache/commons/httpclient/contrib/ssl/EasySSLProtocolSocketFactory.java?view=markup

:あなたはここにソースを見つけることができます

HttpClient httpClient = new HttpClient(); 
mHttpClient = httpClient; 
Protocol easyhttps = new Protocol("https", new EasySSLProtocolSocketFactory(), 443); 
Protocol.registerProtocol("https", easyhttps); 

EasySSLProtocolSocketsfactoryの使用ができるようになりますあなたのHttpClientいずれかを無視します証明書の失敗/発行

0

AndroidHttpClientをご覧ください。基本的には、DefaultHttpClientの代わりに、HTTPSを含む一般的に使用されているいくつかのスキームを、作成時の裏側に登録します。

このクライアントのインスタンスを使用してHttpGetを実行すると、URLが「https」スキームを示す場合は、SSLを処理します。あなた自身のSSLプロトコル/スキームなどを登録することで、混乱する必要はありません。