zoukankan      html  css  js  c++  java
  • HttpClient parameter 和body 传输同时进行

    package com.uxsino.simo.collector.connections;

    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    import com.google.common.base.Charsets;
    import com.google.gson.JsonObject;
    import com.uxsino.commons.utils.StringUtils;
    import com.uxsino.simo.connections.AbstractConnection;
    import com.uxsino.simo.connections.exception.SimoConnectionException;
    import com.uxsino.simo.connections.target.SimoAgentTarget;
    import lombok.Data;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.CredentialsProvider;
    import org.apache.http.client.config.RequestConfig;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpPatch;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.BasicCredentialsProvider;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClientBuilder;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.params.BasicHttpParams;
    import org.apache.http.params.HttpParams;
    import org.apache.http.util.EntityUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import springfox.documentation.spring.web.json.Json;

    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.UnsupportedEncodingException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;

    public class SimoAgentConnection extends AbstractConnection<SimoAgentTarget> {
    static Logger logger = LoggerFactory.getLogger(HTTPConnection.class);

    private CloseableHttpClient client;

    private String urlBase;

    private static int DEFAULT_TIMEOUT_MS = 50000;

    private static int DEFAULT_TIMEOUT_CONNECT_MS = 2000;

    static {
    System.setProperty("http.maxConnections", "5000");
    }

    @Data
    class AgentCmd {
    private String cmd;

    private Map<String, String> args;

    AgentCmd(String cmd, Map<String, String> args) {
    this.cmd = cmd;
    this.args = args;
    }
    }

    @Data
    public static class Target{
    String username;
    String password;
    String cmd;
    String timeReg;
    String timeFormat;
    String fileMatchingRule;
    }

    public static void main(String[] args) {
    SimoAgentTarget simoAgentTarget = new SimoAgentTarget();
    Target target = new Target();

    simoAgentTarget.setUsername("uxsino");
    simoAgentTarget.setPassword("1234");
    simoAgentTarget.host = "localhost";
    simoAgentTarget.port = 55555;
    simoAgentTarget.passwordEncrypted = false;
    SimoAgentConnection simoAgentConnection = new SimoAgentConnection();
    try {
    simoAgentConnection.connect(simoAgentTarget);
    } catch (Exception e) {
    e.printStackTrace();
    System.out.println("simoAgent 连接失败");
    }
    if(simoAgentConnection.isConnected()){
    try {
    String ss = simoAgentConnection.exec(simoAgentConnection.createCmdPattern("ipconfig")).toString();
    System.out.println(ss);
    } catch (SimoConnectionException e) {
    e.printStackTrace();
    System.out.println("simoAgent 获取数据时失败");
    }
    }else{

    }
    }

    public String createCmdPattern(String cmdPattern){
    JSONObject json = new JSONObject();
    json.put("cmd",cmdPattern);
    return json.toJSONString();
    }


    @Override
    public int connect(SimoAgentTarget target) {
    this.target = target;
    super.connect(target);
    CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
    HttpClientBuilder builder = HttpClientBuilder.create();
    builder.setDefaultCredentialsProvider(credentialsProvider);
    client = builder.build();
    urlBase = "http://" + target.host + ":" + target.port;
    connected = true; // not really connected
    state = 1;
    return state;
    }



    private Object exec(Object cmdPattern) throws SimoConnectionException {
    String cmdStr = urlBase + "/main/exec?username=uxsino&password=1234";
    HttpPost post = new HttpPost(cmdStr);
    List<NameValuePair> list = new ArrayList<NameValuePair>();
    if(StringUtils.isNotBlank(target.getProperty("timeReg"))){
    list.add(new BasicNameValuePair("timeReg", target.getProperty("timeReg")));
    }
    if(StringUtils.isNotBlank(target.getProperty("timeFormat"))){
    list.add(new BasicNameValuePair("timeFormat", target.getProperty("timeFormat")));
    }
    if(StringUtils.isNotBlank(target.getFileMatchingRule())){
    list.add(new BasicNameValuePair("fileMatchingRule", target.getFileMatchingRule()));
    }
    list.add(new BasicNameValuePair("path", target.getPath()));
    list.add(new BasicNameValuePair("username","uxsino"));
    list.add(new BasicNameValuePair("password","1234"));
    list.add(new BasicNameValuePair("cmd",cmdPattern.toString()));
    // try {
    Target targets = new Target();
    targets.setCmd("ipconfig");
    targets.setUsername("uxsino");
    targets.setPassword("1234");
    String s = JSON.toJSONString(targets);
    System.out.println(s);
    post.setEntity(new StringEntity(s, Charsets.UTF_8));
    System.out.println(s);
    // post.setEntity(new UrlEncodedFormEntity(list, "UTF-8"));
    // } catch (UnsupportedEncodingException e) {
    // e.printStackTrace();
    // }
    int timeoutMs = target.getTimeout() < DEFAULT_TIMEOUT_MS ? DEFAULT_TIMEOUT_MS : target.getTimeout();
    RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(timeoutMs)// 获取数据的超时时间
    .setConnectTimeout(DEFAULT_TIMEOUT_CONNECT_MS)// 建立连接的超时时间
    .setConnectionRequestTimeout(timeoutMs)// 数据传输超时时间
    .build();
    post.setConfig(requestConfig);
    HttpParams httpParams = new BasicHttpParams();
    httpParams.setParameter("username","uxsino");
    httpParams.setParameter("password","1234");
    post.setParams(httpParams) ;
    post.setHeader("Content-Type", "application/json; charset=UTF-8");

    HttpEntity entity = null;
    try {
    HttpResponse response = client.execute(post);
    entity = response.getEntity();
    InputStream in = entity.getContent();
    ByteArrayOutputStream resultByte = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int length;
    while ((length = in.read(buffer)) != -1) {
    resultByte.write(buffer, 0, length);
    }
    String result = resultByte.toString("GBK");
    try {
    System.out.println(result);
    return result;
    // JSONObject res = JSON.parseObject(result);
    // return res;
    } catch (Exception e) {
    logger.warn("{}", e);
    return null;
    }
    } catch (IOException e) {
    logger.error("error executing cmd in http connection", e);
    throw new SimoConnectionException(e);
    } finally {
    EntityUtils.consumeQuietly(entity);
    }
    }

    @Override
    public Object execCmd(Object cmdPattern) throws SimoConnectionException {
    JSONObject res = (JSONObject) exec(cmdPattern);
    if (res == null) {
    return null;
    }
    Integer code = res.getInteger("code");
    if (code == null) {
    return null;
    }
    if (code.equals(new Integer(0))) {
    return res;
    } else {
    logger.warn("get agent data error with error code : {}, msg: {}, {}", code, res.get("msg"),
    res.get("data"));
    return null;
    }
    }

    @Override
    public AgentCmd buildCmd(String cmdPattern, Map<String, String> args) {
    Map<String, String> map = new HashMap<String, String>(args);
    return new AgentCmd(cmdPattern, map);
    }

    @Override
    public int close() {
    try {
    if (client != null){
    client.close();
    }
    } catch (IOException e) {
    logger.error("error closing http connection", e);
    }
    connected = false;

    super.close();
    return 0;
    }

    @Override
    public boolean testWithConnected(String cmdString, String resStart) {
    connected = false;
    try {
    JSONObject res = null;
    try {
    res = (JSONObject) exec(new AgentCmd("test_conn", new HashMap<String, String>()));
    } catch (SimoConnectionException e) {
    logger.error("error executing cmd in http connection", e);
    }
    if (res != null) {
    Long code = res.getLong("code");
    if (code.equals(-777L)) {
    connected = false;
    } else {
    connected = true;
    }
    }
    } catch (Exception e) {
    logger.warn("{}", e);
    connected = false;
    }
    logger.info("http connection test result: {}", connected);
    return connected;
    }
    }






    说明:1. 黄色部分为表单传输和body 传输同时进行,
       2. 灰色部分为表单传输
    3. 通过实验证明灰色部分和黑色部分不能同时进行。如果要达到两种效果用1
  • 相关阅读:
    【Codeforces 776B】Sherlock and his girlfriend
    BZOJ4942 NOI2017整数(线段树)
    BZOJ4516 SDOI2016生成魔咒(后缀数组+平衡树)
    BZOJ4943 NOI2017蚯蚓排队(哈希+链表)
    Codeforces Round#500 Div.2 翻车记
    BZOJ5093 图的价值(NTT+斯特林数)
    BZOJ2821 作诗(分块)
    BZOJ2724 [Violet]蒲公英(分块)
    BZOJ2001 HNOI2010城市建设(线段树分治+LCT)
    BZOJ1093 ZJOI2007最大半连通子图(缩点+dp)
  • 原文地址:https://www.cnblogs.com/dousil/p/14452585.html
Copyright © 2011-2022 走看看