不少項目須要部署在內部服務器上,但項目中又須要向外部網絡環境發送請求的需求,公司爲了內部網絡的安全會提供代理主機,來轉發這種鏈接外部外部網絡的請求。一個常見的場景,好比:項目中須要請求外網的天氣情況接口,這就須要經過代理主機來發送請求。
下文內容就是發送請求,接收數據的示例java
高德地圖提供天氣查詢接口: https://restapi.amap.com/v3/weather/weatherInfo?city=110101&key=3ff9482454cb60bcb73f65c8c48d4209
請求代碼json
import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.URL; import java.util.ArrayList; import java.util.List; public static final String weather_url =""; //要請求的外網url public static final String proxy_ip =""; //代理的ip public static final String proxy_port=""; //代理的端口 //請求代碼 try { URL url = new URL(weather_url); //建立代理對象 Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxy_ip, Integer.parseInt(proxy_port))); //建立代理連接 HttpURLConnection connection = (HttpURLConnection) url.openConnection(proxy); connection.connect(); //經過連接獲取響應流對象 InputStream in = connection.getInputStream(); //將響應的流對象寫入object對象 byte[] bytes = toByteArray(in); //定義接收的返回值編碼格式 String content = new String(bytes,"UTF-8"); JSONObject forObject = JSONObject.parseObject(content); //在從json對象中獲取lives節點的數據 String lives = forObject.getJSONArray("lives").toString(); } catch (Exception e) { log.error("調用查詢天氣接口失敗[{}]",e); e.printStackTrace(); }
發送請求後接收到的是流對象,須要將流對象轉換爲jsonobject對象,再作後續處理
以上api