2016-05-17 61 views
0

我正在使用Java構建一系列Web服務,其中包括依靠Google的Geocoding Maps API將物理地址轉換爲經度和緯度點。使用HttpsUrlConnection訪問Google地理編碼服務

根據documentation,地理編碼服務可以通過簡單的GET來訪問,例如,以下網址:

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

這裏YOUR_API_KEY將對應於您的應用程序實際的密鑰進行更換。

即將到來的實際問題,我打算在Java中使用HttpsUrlConnection進行GET調用。但是,我對我應該信任哪個證書感到困惑。僅僅信任所有證書是安全的,還是應該將Google SSL證書安裝到我的信任存儲中,並且只相信它?關於中間人攻擊,我閱讀了Stack Overflow,但我不知道它們在這裏是否有可能。

回答

1

取決於。

由已知證書頒發機構(CA)簽署的Google SSL證書是否?

如果是這樣,那麼SSL證書應該位於Java附帶的默認信任庫中,並且您不需要執行任何操作來信任該證書。

如果不是,那麼您需要特別信任Google SSL證書。

我個人使用InstallCert程序下載證書並將其安裝到默認的Java Truststore。

編輯

下面是一些示例代碼爲您提供:

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(); 
    } 
} 

上面的代碼的靈感來自於,ER(主要)由How to send HTTP request in java?被盜,如何使用HttpURLConnection POST data to web server?

+0

FWIW, https://maps.google.api/的Google SSL證書由「GeoTrust Global CA」鏈接的「Google Internet Authority G2」簽署。快速瀏覽最近下載的Java版本附帶的信任庫(cacerts),「GeoTrust Global CA」位於該信任庫中,您應該樂於助人。 – hooknc

+0

我會測試你的答案並回復你,謝謝。 –

+1

添加了一些您應該可以運行的示例代碼。順便說一句,我強烈建議你看看使用HttpClient,使用HttpURLConnection是可怕的。 – hooknc

相關問題