Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.starmcc.qmframework.tools.http.QmHttpClient Maven / Gradle / Ivy
package com.starmcc.qmframework.tools.http;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
/**
* QmHttpClient工具类
*
* @Author starmcc
* @Date 2018年11月24日 上午2:01:35
*/
public class QmHttpClient {
private static final Logger LOG = LoggerFactory.getLogger(QmHttpClient.class);
private final static String POST = "post";
private final static String GET = "getQmResponseOut";
/**
* 默认字符编码
*/
private final static String ENCODING = "UTF-8";
/**
* 根据手机号获取手机号归属地
* {
* mts:'1585078',
* province:'江苏',
* catName:'中国移动',
* telString:'15850781443',
* areaVid:'30511',
* ispVid:'3236139',
* carrier:'江苏移动'
* }
*
* @param mobile 手机号
* @return 手机归属地字符串
*/
public static String mobilePhoneHome(String mobile) {
String url = "https://tcc.taobao.com/cc/json/mobile_tel_segment.htm";
Map map = new HashMap<>(16);
map.put("tel", mobile);
String response = QmHttpClient.send("GET", url, map);
return response;
}
/**
* 获取ip地址的归属地
* localAddress={city:"广州市", province:"广东省"}
*
* @param ip IP地址
* @return 归属地字符串
*/
public static String getIpAddress(String ip) {
Map params = new HashMap(16);
params.put("ip", ip);
String content = QmHttpClient.send("GET", "http://ip.ws.126.net/ipquery", params);
String str = content.substring(content.indexOf("{") + 1, content.indexOf("}"));
String[] st = str.split(",");
String pro = st[1].substring(st[1].indexOf("province:\"") + 10, st[1].lastIndexOf("\""));
String city = st[0].substring(st[0].indexOf("city:\"") + 6, st[0].lastIndexOf("\""));
return pro + "-" + city;
}
/**
* 获取用户真实IP地址,不使用request.getRemoteAddr();的原因是有可能用户使用了代理软件方式避免真实IP地址,
* 可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的真实IP呢?
* 答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。
* 如:X-Forwarded-For:192.168.1.110, 192.168.1.120,
* 192.168.1.130,192.168.1.100
* 用户真实IP为: 192.168.1.110
*
* @param request
* @return
*/
public static String getHttpIp(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
String unknown = "unknown";
if (null == ip || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (null == ip || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (null == ip || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (null == ip || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (null == ip || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
/**
* POST提交
*
* @param url url
* @param headers 请求头
* @param params 请求参数
* @param encoding 编码方式
* @return
*/
private static String sendPost(String url,
Map headers,
Map params,
String encoding) {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost post = new HttpPost(url);
if (headers != null && headers.size() != 0) {
for (Map.Entry entry : headers.entrySet()) {
post.setHeader(entry.getKey(), entry.getValue());
}
}
if (null != params) {
// 处理参数
HttpEntity entity = handleParam(params, encoding);
// 添加参数
post.setEntity(entity);
}
CloseableHttpResponse response = null;
String content = null;
try {
response = httpClient.execute(post);
content = EntityUtils.toString(response.getEntity());
} catch (Exception e) {
e.printStackTrace();
} finally {
close(response, httpClient);
}
LOG.info(content);
return content;
}
/**
* GET提交
*
* @param url 请求url
* @param headers 请求头
* @param params 请求参数
* @param encoding 编码方式
* @return 响应数据
*/
private static String sendGet(String url,
Map headers,
Map params,
String encoding) {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet get = new HttpGet(url);
if (null != headers && headers.size() != 0) {
for (Map.Entry entry : headers.entrySet()) {
get.setHeader(entry.getKey(), entry.getValue());
}
}
if (null != params) {
// 处理参数
HttpEntity entity = handleParam(params, encoding);
try {
String paramStr = EntityUtils.toString(entity);
get = new HttpGet(url + "?" + paramStr);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
CloseableHttpResponse response = null;
String content = null;
try {
response = httpClient.execute(get);
content = EntityUtils.toString(response.getEntity(), encoding);
} catch (Exception e) {
e.printStackTrace();
} finally {
close(response, httpClient);
}
LOG.info(content);
return content;
}
/**
* 处理参数
*
* @param params 请求参数
* @param encoding 请求编码格式
* @return HttpEntity
*/
private static HttpEntity handleParam(Map params, String encoding) {
List pList = new ArrayList();
Iterator> entrys = params.entrySet().iterator();
while (entrys.hasNext()) {
Map.Entry entry = entrys.next();
String key = entry.getKey();
Object value = entry.getValue();
try {
// 处理数组
Object[] objs = (Object[]) value;
for (Object obj : objs) {
pList.add(new BasicNameValuePair(key, obj.toString()));
}
} catch (Exception e) {
// 处理普通类型
pList.add(new BasicNameValuePair(key, value.toString()));
}
}
UrlEncodedFormEntity uefEntity = null;
try {
uefEntity = new UrlEncodedFormEntity(pList, encoding);
} catch (Exception e) {
e.printStackTrace();
}
return uefEntity;
}
/**
* 关闭连接
*
* @param response CloseableHttpResponse
* @param httpClient CloseableHttpClient
*/
private static void close(CloseableHttpResponse response, CloseableHttpClient httpClient) {
try {
if (null != response) {
response.close();
}
if (null != httpClient) {
httpClient.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
// ===========================================封装===========================
/**
* 提交请求
*
* @param method 请求类型
* @param url 请求URL
* @param headers 请求头
* @param params 请求参数
* @param encoding 请求编码格式
* @return String 响应数据
*/
public static String send(String method,
String url,
Map headers,
Map params,
String encoding) {
if (POST.equalsIgnoreCase(method)) {
return QmHttpClient.sendPost(url, headers, params, encoding);
} else if (GET.equalsIgnoreCase(method)) {
return QmHttpClient.sendGet(url, headers, params, encoding);
} else {
return null;
}
}
/**
* 提交请求
*
* @param method 请求类型
* @param url 请求URL
* @param params 请求参数
* @return String 响应数据
*/
public static String send(String method, String url, Map params) {
return QmHttpClient.send(method, url, null, params, ENCODING);
}
/**
* 提交请求
*
* @param method 请求类型
* @param url 请求URL
* @param params 请求参数
* @return String 响应数据
*/
public static String send(String method,
String url,
Map headers,
Map params) {
return QmHttpClient.send(method, url, headers, params, ENCODING);
}
/**
* 提交请求
*
* @param method 请求类型
* @param url 请求URL
* @param params 请求参数
* @return String 响应数据
*/
public static String send(String method, String url, Map params, String encoding) {
return QmHttpClient.send(method, url, null, params, encoding);
}
}