1
    很多项目需要部署在内部服务器上,但项目中又需要向外部网络环境发送请求的需求,公司为了内部网络的安全会提供代理主机,来转发这种连接外部外部网络的请求。一个常见的场景,比如:项目中需要请求外网的天气状况接口,这就需要通过代理主机来发送请求。

下文内容就是发送请求,接收数据的示例

高德地图提供天气查询接口: 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对象,再做后续处理
以上


一片秋叶一树春
47 声望3 粉丝

贪君子之财,好美景之色,行正义之事,了前生之愿,爱此生之人!!!!!