使用Java向Google Elevation API发送请求

时间:2014-04-01 15:27:32

标签: java google-maps-api-3 google-api

我尝试将Post请求发送到Google提升API并期待回复

private final String ELEVATION_API_URL =  "https://maps.googleapis.com/maps/api/elevation/json";

private final String USER_AGENT = "Mozilla/5.0";

String urlParameters = "locations=6.9366681,79.9393521&sensor=true&key=<API KEY>";


URL obj = new URL(ELEVATION_API_URL);
            java.net.HttpURLConnection con = (java.net.HttpURLConnection)obj.openConnection();

            //add reuqest header
            con.setRequestMethod("POST");
            con.setRequestProperty("User-Agent", USER_AGENT);
            con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            con.setRequestProperty("Content-Language", "en-US");  

            String urlParameters = request;

            // Send post request
            con.setDoOutput(true);
            DataOutputStream wr = new DataOutputStream(con.getOutputStream());
            wr.writeBytes(urlParameters);
            wr.flush();
            wr.close();

            int responseCode = con.getResponseCode();

我正在以这种方式发送请求,但我收到的响应代码为400.这在浏览器发送请求时有效。这段代码有什么问题。

2 个答案:

答案 0 :(得分:1)

要允许我恢复XML,我对您的项目进行了以下更改

StringBuilder response = new StringBuilder(); // placed on the top of your Class

**wr.writeBytes(urlParameters.toString());** // as you have it in your code
System.out.println("ResponseMessage : " + connection.getResponseMessage());
System.out.println("RequestMethod : " + connection.getRequestMethod());

in = new BufferedReader(new InputStreamReader(connection.getInputStream()));

String inputLine;

while ((inputLine = in.readLine()) != null) {

    response.append(inputLine);

}

in.close();

wr.flush();

wr.close();

//我将网址更改为:
    private final String ELEVATION_API_URL =&#34; https://maps.googleapis.com/maps/api/elevation/xml&#34;;

//**I get XML in the response** 

return response.toString();

答案 1 :(得分:0)

我认为url参数存在问题。

首先,因为发送空的提升api请求确实返回代码400(Invalid request. Missing the 'path' or 'locations' parameter.)。

其次,因为这有效(返回200):

public void test() throws Exception {
    String ELEVATION_API_URL =  "https://maps.googleapis.com/maps/api/elevation/json";

    String USER_AGENT = "Mozilla/5.0";

    String urlParameters = "locations=6.9366681,79.9393521&sensor=true";


    URL obj = new URL(ELEVATION_API_URL + "?" + urlParameters);
    HttpURLConnection con = (HttpURLConnection) obj.openConnection();

    //add reuqest header
    con.setRequestMethod("POST");
    con.setRequestProperty("User-Agent", USER_AGENT);
    con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    con.setRequestProperty("Content-Language", "en-US");

    //String urlParameters = request;

    // Send post request
    con.setDoOutput(true);
    DataOutputStream wr = new DataOutputStream(con.getOutputStream());
    wr.writeBytes(urlParameters);
    wr.flush();
    wr.close();

    int responseCode = con.getResponseCode();
}