Как выполнить запрос HTTPS получить через HTTP-клиент? - PullRequest
4 голосов
/ 12 ноября 2011

Я пытаюсь сделать запрос GET через конечную точку 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());
              }

Ответы [ 2 ]

0 голосов
/ 13 ноября 2011

Взгляните на AndroidHttpClient.По сути, это альтернатива DefaultHttpClient, которая регистрирует некоторые часто используемые схемы (включая HTTPS) для вас за кулисами при его создании.

После этого вы сможете выполнить HttpGet s, используя этот экземплярэтого клиента, и он будет обрабатывать SSL для вас, если ваш URL-адрес указывает на схему «https».Вам не нужно возиться с регистрацией собственных протоколов / схем SSL и т. Д.

0 голосов
/ 13 ноября 2011

Я не уверен, что этот подход будет работать на Android, но мы видели ту же проблему в серверной Java с использованием HttpClient с HTTPS URL.Вот как мы решили проблему:

Сначала мы скопировали / адаптировали реализацию класса EasySSLProtocolSocketFactory в нашу собственную кодовую базу.Вы можете найти источник здесь:

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

С этим классом мы создадим наши новые экземпляры HttpClient с:

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

ИспользованиеEasySSLProtocolSocketsfactory позволит вашему HttpClient игнорировать любые сбои / ошибки сертификата при выполнении запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...