码迷,mamicode.com
首页 > Web开发 > 详细

httpClient发送post请求

时间:2015-10-21 20:42:27      阅读:300      评论:0      收藏:0      [点我收藏+]

标签:

HttpClient官方文档:http://hc.apache.org/

 

/*
 * 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.generalhttp;

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 com.ndkey.net.MacAddress;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
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.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 GeneralHttpProxy implements AuditProxy {
    
    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 {
            List<NameValuePair> nvps = new ArrayList<NameValuePair>();
            nvps.add(new BasicNameValuePair("tyep", "login"));
            nvps.add(new BasicNameValuePair("userName", request.getUserName()));
            nvps.add(new BasicNameValuePair("userIp", request.getUserIp().getHostAddress()));
            String userMac = MacAddress.parseMacAddress(Hex.encodeHexString(request.getUserMac())).getAddress();
            nvps.add(new BasicNameValuePair("userMac", userMac));
            String time = DATE_FORMAT.format(request.getTime());
            nvps.add(new BasicNameValuePair("time", time));
            String signature = DigestUtils.shaHex(time + getSecretKey());
            nvps.add(new BasicNameValuePair("signature", signature));
            sendMessage(nvps);
        } catch (IOException ex) {
            throw new AuditProxyException(ex);
        }
    }
    
    @Override
    public void auditLogout(LogoutRequest request) throws AuditProxyException {
        try {
            List<NameValuePair> nvps = new ArrayList<NameValuePair>();
            nvps.add(new BasicNameValuePair("tyep", "logout"));
            nvps.add(new BasicNameValuePair("userName", request.getUserName()));
            nvps.add(new BasicNameValuePair("userIp", request.getUserIp().getHostAddress()));
            String time = DATE_FORMAT.format(request.getTime());
            nvps.add(new BasicNameValuePair("time", time));
            String signature = DigestUtils.shaHex(time + getSecretKey());
            nvps.add(new BasicNameValuePair("signature", signature));
            sendMessage(nvps);
        } catch (IOException ex) {
            throw new AuditProxyException(ex);
        }
    }
    
    protected void sendMessage(List<NameValuePair> nvps) throws IOException {
        try {
            HttpPost httpPost = new HttpPost(getAddress());
            httpPost.setConfig(RequestConfig.custom().setConnectionRequestTimeout(getTimeout() * 1000)
                    .setConnectTimeout(getTimeout() * 1000).build());            
            httpPost.setEntity(new UrlEncodedFormEntity(nvps));
            httpClient.execute(httpPost);
        } catch (IOException e) {
            _logger.error(e.getMessage());
            throw new IOException(e);
        }
    }
}

 

httpClient发送post请求

标签:

原文地址:http://www.cnblogs.com/littlehoom/p/4898665.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!