2016-05-17 6 views
0

Я занимаюсь созданием ряда веб-сервисов на Java, которые, помимо прочего, будут полагаться на API геокодирования Google для преобразования физических адресов в широту и долготу.Использование HttpsUrlConnection для доступа к службе геокодирования Google

В службе documentation можно получить доступ к службе геокодирования, выполнив простой GET, например. следующий URL:

https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key=YOUR_API_KEY 

Здесь YOUR_API_KEY будет заменено на клавишу, соответствующую вашему приложению.

Выполнение данного вопроса, я планирую использовать HttpsUrlConnection в Java, чтобы позвонить GET. Однако я смущен тем, какой сертификат мне следует доверять. Безопасно ли доверять всем сертификатам или устанавливать сертификат SSL в моем хранилище доверия и доверять только этому? Я читал о переполнении стека о нападениях «человек в середине», но я не знаю, могут ли они быть здесь.

ответ

1

Зависит.

Является ли сертификат Google SSL подписанным авторитетным центром сертификации (CA)?

Если это так, этот сертификат SSL должен находиться в доверительном магазине по умолчанию, который поставляется с Java, и вам не нужно ничего делать, чтобы доверять этому сертификату.

Если нет, то вам нужно будет доверять SSL-сертификату Google.

Лично я использую программу InstallCert для загрузки и установки сертификатов в Java Truststore по умолчанию.

EDIT

Вот несколько примеров кода для вас:

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 

public class GoogleMapsTest { 

    public static void main(String[] args) throws Exception { 

     URL url = new URL("https://maps.google.com/"); 

     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 

     connection.setRequestMethod("GET"); 

     InputStream is = connection.getInputStream(); 
     BufferedReader rd = new BufferedReader(new InputStreamReader(is)); 
     String line; 
     while((line = rd.readLine()) != null) { 
      System.out.println(line); 
     } 
     rd.close(); 
    } 
} 

Приведенный выше код был вдохновлен, э (в основном) украдено из How to send HTTP request in java? и как использовать HttpURLConnection POST data to web server?

+0

FWIW, SSL-сертификат Google для https: //maps.google.api/ подписан «Google Internet Authority G2», который подключен к сети «GeoTrust Global CA». Взяв быстрый взгляд на доверительный магазин (cacerts), который поставляется с недавно загруженной версией Java, «GeoTrust Global CA» находится в этом доверенном магазине, и вам должно быть хорошо идти. – hooknc

+0

Я проверю ваш ответ и вернусь к вам, спасибо. –

+1

Добавлен код примера, который вы можете запустить. Кстати, я бы настоятельно рекомендовал вам изучить использование HttpClient, используя HttpURLConnection, ужасно. – hooknc