zoukankan      html  css  js  c++  java
  • httpClient发送post请求

    /*
     * 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();
                }
            }
        }
    }
  • 相关阅读:
    TCP校验和
    Python8 数据库基础
    Python7 TCPIP协议与抓包
    Python6 线程与进程、网络编程、生成器与迭代器、协程、异步IO
    python2 变量与数据类型
    Python10 前端基础与爬虫
    Python11 Scrapy框架基础
    python3 函数、运算符与数据类型的常用方法
    Python9 数据库进阶
    python1 简介
  • 原文地址:https://www.cnblogs.com/littlehoom/p/4898665.html
Copyright © 2011-2022 走看看