您的位置:首页 > 理论基础 > 计算机网络

httpClient发送post请求

2015-10-21 18:42 525 查看
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.ndkey.auditproxy.generichttp;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.ndkey.auditproxy.AuditProxy;
import com.ndkey.auditproxy.AuditProxyException;
import com.ndkey.auditproxy.LoginRequest;
import com.ndkey.auditproxy.LogoutRequest;
import com.ndkey.auditproxy.config.TimeoutConfig;
import com.ndkey.config.ConfigType;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Random;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.lang.time.FastDateFormat;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
*
* @author zxf
*/
public class GenericHttpProxy implements AuditProxy {

private final static ObjectMapper _objectMapper = new ObjectMapper();
private static final FastDateFormat DATE_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd' 'HH:mm:ss");
private final Logger _logger = LoggerFactory.getLogger(this.getClass());
private static final List<ConfigType> CONFIG_TYPES = new LinkedList<ConfigType>();
private Map<String, String> configs = new HashMap<String, String>();
private CloseableHttpClient httpClient = null;

static {
CONFIG_TYPES.add(new AddressConfig());
CONFIG_TYPES.add(new SecretKeyConfig());
CONFIG_TYPES.add(new TimeoutConfig());
}

public void setAddress(String address) {
configs.put(AddressConfig.UUID, address);
}

public String getAddress() {
return AddressConfig.getValue(configs);
}

public void setSecretKey(String secretKey) {
configs.put(SecretKeyConfig.UUID, secretKey);
}

public String getSecretKey() {
return SecretKeyConfig.getValue(configs);
}

public void setTimeout(int timeout) {
configs.put(TimeoutConfig.UUID, String.valueOf(timeout));
}

public int getTimeout() {
return TimeoutConfig.getValue(configs);
}

@Override
public String getName() {
return "通用HTTP代理";
}

@Override
public void init() throws AuditProxyException {
httpClient = HttpClients.createDefault();

}

@Override
public void destroy() {
try {
httpClient.close();
} catch (IOException ex) {
_logger.error("关闭httpClient失败", ex);
}
}

@Override
public List<ConfigType> getConfigTypes() {
return CONFIG_TYPES;
}

@Override
public Map<String, String> getConfigs() {
return configs;
}

@Override
public void setConfigs(Map<String, String> configs) {
this.configs = configs;
for (ConfigType type : getConfigTypes()) {
if (!this.configs.containsKey(type.getUuid())) {
this.configs.put(type.getUuid(), type.getDefaultValue());
}
}
}

@Override
public void auditLogin(LoginRequest request) throws AuditProxyException {
try {
Map<String, String> map = new HashMap<String, String>();
long timestamp = Calendar.getInstance().getTimeInMillis();
byte[] nonceBytes = new byte[16];
new Random().nextBytes(nonceBytes);
String nonce = Hex.encodeHexString(nonceBytes);
map.put("type", "login");
map.put("userName", request.getUserName());
map.put("userIp", request.getUserIp().getHostAddress());
if (request.getUserMac() != null) {
map.put("userMac", request.getUserMac().getAddress());
}
String time = DATE_FORMAT.format(request.getTime());
map.put("time", time);
String info = _objectMapper.writeValueAsString(map);
String signature = DigestUtils.shaHex(info + timestamp + nonce + getSecretKey());

sendMessage(info, timestamp, nonce, signature);
} catch (IOException ex) {
throw new AuditProxyException(ex);
}
}

@Override
public void auditLogout(LogoutRequest request) throws AuditProxyException {
try {
Map<String, String> map = new HashMap<String, String>();
long timestamp = Calendar.getInstance().getTimeInMillis();
byte[] nonceBytes = new byte[16];
new Random().nextBytes(nonceBytes);
String nonce = Hex.encodeHexString(nonceBytes);
map.put("type", "logout");
map.put("userName", request.getUserName());
map.put("userIp", request.getUserIp().getHostAddress());
if (request.getUserMac() != null) {
map.put("userMac", request.getUserMac().getAddress());
}
String time = DATE_FORMAT.format(request.getTime());
map.put("time", time);
String info = _objectMapper.writeValueAsString(map);
String signature = DigestUtils.shaHex(info + timestamp + nonce + getSecretKey());
sendMessage(info, timestamp, nonce, signature);
} catch (IOException ex) {
throw new AuditProxyException(ex);
}
}

protected void sendMessage(String info, long timestamp, String nonce, String signature) throws IOException {
CloseableHttpResponse response = null;
try {
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("info", info));
nvps.add(new BasicNameValuePair("timestamp", String.valueOf(timestamp)));
nvps.add(new BasicNameValuePair("nonce", nonce));
nvps.add(new BasicNameValuePair("signature", signature));
HttpPost httpPost = new HttpPost(getAddress());
httpPost.setConfig(RequestConfig.custom().setConnectionRequestTimeout(getTimeout() * 1000)
.setConnectTimeout(getTimeout() * 1000)
.build());
httpPost.setEntity(new UrlEncodedFormEntity(nvps));
response = httpClient.execute(httpPost);
} catch (IOException e) {
_logger.error(e.getMessage());
throw new IOException(e);
} finally {
if (response != null) {
response.close();
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: