需求:
银联安全检测,在支付的时候,必须传入公网ip的,作为风控的必传字段,但是公网ip不能直接获取,所以就使用第三方阿里的接口来获取公网ip。
代码:
为防止和项目中已经封装好的Retrofit框架冲突,这里通过HttpURLConnection的get请求直接封装一下:
/** * 获取IP(外网ip、公网ip) */ public static String getNetIp() { String IP = ""; try { String address = "http://ip.taobao.com/service/getIpInfo2.php?ip=myip"; URL url = new URL(address); //URLConnection htpurl=url.openConnection(); HttpURLConnection connection = (HttpURLConnection) url .openConnection(); connection.setUseCaches(false); connection.setRequestMethod("GET"); connection.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.7 Safari/537.36"); //设置浏览器ua 保证不出现503 if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { InputStream in = connection.getInputStream(); // 将流转化为字符串 BufferedReader reader = new BufferedReader( new InputStreamReader(in)); String tmpString = ""; StringBuilder retJSON = new StringBuilder(); while ((tmpString = reader.readLine()) != null) { retJSON.append(tmpString + "\n"); } JSONObject jsonObject = new JSONObject(retJSON.toString()); String code = jsonObject.getString("code"); if (code.equals("0")) { JSONObject data = jsonObject.getJSONObject("data"); //格式:180.000.00.000(中国区上海上海电信) // IP = data.getString("ip") + "(" + data.getString("country") // + data.getString("area") + "区" // + data.getString("region") + data.getString("city") // + data.getString("isp") + ")"; //格式:180.000.00.000 IP = data.getString("ip"); LogUtil.e("提示", "您的IP地址是:" + IP); } else { IP = ""; LogUtil.e("提示", "IP接口异常,无法获取IP地址!"); } } else { IP = ""; LogUtil.e("提示", "网络连接异常,无法获取IP地址!"); } } catch (Exception e) { IP = ""; LogUtil.e("提示", "获取IP地址时出现异常,异常信息是:" + e.toString()); } return IP; }