使用HttpsUrlConnection访问Google Geocoding服务

时间:2016-05-17 15:45:26

标签: java ssl google-geocoder httpsurlconnection

我正在使用Java构建一系列Web服务,其中包括依赖Google的Geocoding Maps API将物理地址转换为纬度和经度点。

根据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 个答案:

答案 0 :(得分:2)

取决于

Google SSL证书是否由已知的Certificate Authority(CA)签名?

如果是这样,那么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();
    }
}

以上代码的灵感来自于How to send HTTP request in java?以及如何使用HttpURLConnection POST data to web server?