很多项目需要部署在内部服务器上,但项目中又需要向外部网络环境发送请求的需求,公司为了内部网络的安全会提供代理主机,来转发这种连接外部外部网络的请求。一个常见的场景,比如:项目中需要请求外网的天气状况接口,这就需要通过代理主机来发送请求。
下文内容就是发送请求,接收数据的示例
高德地图提供天气查询接口: https://restapi.amap.com/v3/weather/weatherInfo?city=110101&key=3ff9482454cb60bcb73f65c8c48d4209
请求代码
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对象,再做后续处理
以上
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。