1. 程式人生 > >Java實現高德地址轉化經緯度

Java實現高德地址轉化經緯度

package com.core.test;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;

public class HttpURLConnectionTest {
    public static final String GET_URL = "http://restapi.amap.com/v3/geocode/geo?key=389880a06e3f893ea46036f030c94700&s=rsv3&city=35"
            + "&address=山東青島李滄區李村社群";
    public static final String POST_URL = "http://restapi.amap.com/v3/geocode/geo?key=389880a06e3f893ea46036f030c94700&s=rsv3&city=35"
            + "&address=山東青島李滄區李村社群";

    /**
     * 介面呼叫 GET
     */
    public static void httpURLConectionGET() {
        try {
            URL url = new URL(GET_URL);    // 把字串轉換為URL請求地址
           HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 開啟連線
           connection.connect();// 連線會話
           // 獲取輸入流
           BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String line;
            StringBuilder sb = new StringBuilder();
            while ((line = br.readLine()) != null) {// 迴圈讀取流
               sb.append(line);
            }
            br.close();// 關閉流
           connection.disconnect();// 斷開連線
           System.out.println("Get=="+sb.toString());
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("失敗!");
        }
    }

    /**
     * 介面呼叫  POST
     */
    public static void httpURLConnectionPOST () {
        try {
            URL url = new URL(POST_URL);

            // 將url 以 open方法返回的urlConnection  連線強轉為HttpURLConnection連線  (標識一個url所引用的遠端物件連線)
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 此時cnnection只是為一個連線物件,待連線中

            // 設定連線輸出流為true,預設false (post 請求是以流的方式隱式的傳遞引數)
            connection.setDoOutput(true);

            // 設定連線輸入流為true
            connection.setDoInput(true);

            // 設定請求方式為post
            connection.setRequestMethod("POST");

            // post請求快取設為false
            connection.setUseCaches(false);

            // 設定該HttpURLConnection例項是否自動執行重定向
           connection.setInstanceFollowRedirects(true);

            // 設定請求頭裡面的各個屬性 (以下為設定內容的型別,設定為經過urlEncoded編碼過的from引數)
            // application/x-javascript text/xml->xml資料 
            //application/x-javascript->json物件  
            //application/x-www-form-urlencoded->表單資料
            //這是重點^_^
           connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

            // 建立連線 (請求未開始,直到connection.getInputStream()方法呼叫時才發起,以上各個引數設定需在此方法之前進行)
            connection.connect();

            // 建立輸入輸出流,用於往連線裡面輸出攜帶的引數,(輸出內容為?後面的內容)
            DataOutputStream dataout = new DataOutputStream(connection.getOutputStream());
            String parm = "storeId=" + URLEncoder.encode("32", "utf-8"); //URLEncoder.encode()方法  為字串進行編碼

            // 將引數輸出到連線
           dataout.writeBytes(parm);

            // 輸出完成後重新整理並關閉流
           dataout.flush();
            dataout.close(); // 重要且易忽略步驟 (關閉流,切記!) 

            System.out.println(connection.getResponseCode());

            // 連線發起請求,處理伺服器響應  (從連接獲取到輸入流幷包裝為bufferedReader)
            BufferedReader bf = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
            String line;
            StringBuilder sb = new StringBuilder(); // 用來儲存響應資料

            // 迴圈讀取流,若不到結尾處
           while ((line = bf.readLine()) != null) {
                sb.append(bf.readLine());
            }
            bf.close();    // 重要且易忽略步驟 (關閉流,切記!) 
            connection.disconnect(); // 銷燬連線
           System.out.println("Post=="+sb.toString());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
//         httpURLConectionGET();
        httpURLConectionGET();
        httpURLConnectionPOST();
    }