背景
通常有两点原因需要通过代理访问互联网平台的提供的WebService接口:
1. 在公司企业内网访问外部互联网平台发布的接口,公司要求通过代理访问外网。
2. 频繁访问平台接口,IP被平台封了,需要寻求一个代理访问。
下面以调用高德提供的坐标转换接口为例说明 如何设置代理
高德提供了一个接口的URL 是:http://restapi.amap.com/v3/assistant/coordinate
locations=116.481499,39.990475&coordsys=gps&output=xml&key=<用户的key>
接口详细说明见:http://lbs.amap.com/api/webservice/guide/api/convert/#convert 。
为了方便JAVA代码调用,可以对接口PATH和参数做一些封装。
封装公共函数
package com.huawei.internetcrawler.util;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import javax.ws.rs.core.MediaType;
import org.apache.cxf.jaxrs.client.WebClient;
public class WebServiceUtil
{
/**
* 设置外网访问proxy
*/
static
{
System.setProperty("http.proxyHost", "代理IP或者域名");
System.setProperty("http.proxyPort", "代理端口号");
}
/*******************************************************************************************************************
* Title: invokeWS
* Description: 调用WebService服务。用于调用互联网开发平台提供的查询接口。
*
* @param url webservice服务接口url。
*
* @return 返回查询结果的json串 ******************************************************************************************************************/
public static String invokeWS(String url, Map<String, String> queryParaMap)
{
WebClient client = WebClient.create(url);
for (Entry<String, String> entry : queryParaMap.entrySet())
{
client.query(entry.getKey(), entry.getValue());
}
String result =client.accept(MediaType.APPLICATION_JSON).get(String.class);
return result;
}
}
客户端调用代码样例
public static void main(String[] args)
{
Map<String, String> queryParaMap = new HashMap<String, String>();
queryParaMap.put("key", "b21166784a64fe201084e6f057f384ab");
queryParaMap.put("locations", "113.941084,22.546002");
queryParaMap.put("coordsys", "baidu");
invokeWS("http://restapi.amap.com/v3/assistant/coordinate/convert", queryParaMap);
}