CloseableHttpClient 4.5.2中执行response = httpClient.execute(httpPost);
没有任何的等待效果,直接返回无连接,如果我想让他保持请求30秒是否可以?
RequestConfig defaultRequestConfig = RequestConfig.custom().
setConnectTimeout(30000).setConnectionRequestTimeout(30000)
.setSocketTimeout(30000).build();
// CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(defaultRequestConfig).build();
CloseableHttpResponse response = null;
String resultString = "";
HttpPost httpPost = new HttpPost(url);
StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
httpPost.setEntity(entity);
httpPost.setConfig(defaultRequestConfig);
String uuid=UuidUtil.getuuid();
PgmsDao pgms=new PgmsDao();
LoginUI login=(LoginUI) FacesUtil.getSessionMapValue("loginUI");
String netid=login.getLdapuser().getNetid();
String request_user=login.getLdapuser().getName();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String request_date = sdf.format(new Date());
Map<String,String> request_map=(Map)new JSONObject().fromObject(json);
String action=request_map.get("action");
response = httpClient.execute(httpPost);
resultString = EntityUtils.toString(response.getEntity(), "utf-8");
String response_date = sdf.format(new Date());
Map<String,String>result=(Map)new JSONObject().fromObject(resultString);
String status=result.get("status");
如果是别的版本也可以,请大佬指点
用这个没问题:https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient/4.5.2
https://blog.csdn.net/h254532699/article/details/54342470/
import lombok.extern.slf4j.Slf4j;
import org.apache.http.*;
import org.apache.http.client.CookieStore;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.config.AuthSchemes;
import org.apache.http.client.config.CookieSpecs;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.config.*;
import org.apache.http.conn.DnsResolver;
import org.apache.http.conn.HttpConnectionFactory;
import org.apache.http.conn.ManagedHttpClientConnection;
import org.apache.http.conn.routing.HttpRoute;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.DefaultHttpResponseFactory;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.*;
import org.apache.http.impl.io.DefaultHttpRequestWriterFactory;
import org.apache.http.io.HttpMessageParser;
import org.apache.http.io.HttpMessageParserFactory;
import org.apache.http.io.HttpMessageWriterFactory;
import org.apache.http.io.SessionInputBuffer;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicLineParser;
import org.apache.http.message.LineParser;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.util.CharArrayBuffer;
import javax.net.ssl.SSLContext;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.CodingErrorAction;
import java.util.Arrays;
public class SyncHttpClientUtil {
private static HttpMessageParserFactory<HttpResponse> responseParserFactory;
private static HttpMessageWriterFactory<HttpRequest> requestWriterFactory = new DefaultHttpRequestWriterFactory();
static HttpConnectionFactory<HttpRoute, ManagedHttpClientConnection> connFactory;
private static SSLContext sslcontext = SSLContexts.createSystemDefault();
private static Registry<ConnectionSocketFactory> socketFactoryRegistry;
private static DnsResolver dnsResolver;
private static PoolingHttpClientConnectionManager connManager;
private static RequestConfig defaultRequestConfig;
private static CloseableHttpClient httpclient;
static{
customerHttpMessageParserFactory();
customerConnectionFactory();
customerRegistry();
customerDnsResolver();
customerPoolingConnectionManager();
customerRequestConfig();
custoemrHttpClients();
}
public static void customerConnectionFactory(){
connFactory = new ManagedHttpClientConnectionFactory(
requestWriterFactory, responseParserFactory);
}
public static void custoemrHttpClients(){
// Use custom cookie store if necessary.
CookieStore cookieStore = new BasicCookieStore();
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
httpclient = HttpClients.custom()
.setConnectionManager(connManager)
.setDefaultCookieStore(cookieStore)
.setDefaultCredentialsProvider(credentialsProvider)
.setDefaultRequestConfig(defaultRequestConfig)
.build();
}
public static void customerRequestConfig(){
defaultRequestConfig = RequestConfig.custom()
.setCookieSpec(CookieSpecs.DEFAULT)
.setExpectContinueEnabled(true)
.setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.DIGEST))
.setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC))
.build();
}
public static void customerPoolingConnectionManager(){
connManager = new PoolingHttpClientConnectionManager(
socketFactoryRegistry, connFactory, dnsResolver);
// socket配置
SocketConfig socketConfig = SocketConfig.custom()
.setTcpNoDelay(true)
.build();
connManager.setDefaultSocketConfig(socketConfig);
// 当连接静止1秒钟时候,会启动验证
connManager.setValidateAfterInactivity(10000);
// 创建消息约束
MessageConstraints messageConstraints = MessageConstraints.custom()
.setMaxHeaderCount(200)
.setMaxLineLength(2000)
.build();
// 创建连接配置
ConnectionConfig connectionConfig = ConnectionConfig.custom()
.setMalformedInputAction(CodingErrorAction.IGNORE)
.setUnmappableInputAction(CodingErrorAction.IGNORE)
.setCharset(Consts.UTF_8)
.setMessageConstraints(messageConstraints)
.build();
// 配置连接管理器以使用连接配置,可以为指定的主机设置其自定义的配置连接管理器
connManager.setDefaultConnectionConfig(connectionConfig);
// connManager.setConnectionConfig(new HttpHost("somehost", 80), ConnectionConfig.DEFAULT);
//为持久连接配置总最大值或每条路由限制,这些连接可以保存在池中,也可以由连接管理器租用。
connManager.setMaxTotal(100);
connManager.setDefaultMaxPerRoute(10);
}
public static void customerDnsResolver(){
dnsResolver = new SystemDefaultDnsResolver();
}
public static void customerRegistry(){
socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.INSTANCE)
.register("https", new SSLConnectionSocketFactory(sslcontext))
.build();
}
public static void customerHttpMessageParserFactory(){
responseParserFactory = new DefaultHttpResponseParserFactory() {
@Override
public HttpMessageParser<HttpResponse> create(
SessionInputBuffer buffer, MessageConstraints constraints) {
LineParser lineParser = new BasicLineParser() {
@Override
public Header parseHeader(final CharArrayBuffer buffer) {
try {
return super.parseHeader(buffer);
} catch (ParseException ex) {
log.info("HttpClient eror : {}" ,ex.getMessage());
return new BasicHeader(buffer.toString(), null);
}
}
};
return new DefaultHttpResponseParser(
buffer, lineParser, DefaultHttpResponseFactory.INSTANCE, constraints) {
@Override
protected boolean reject(final CharArrayBuffer line, int count) {
return false;
}
};
}
};
}
public static <T> T executeGet(URI uri, Header[] headers, ResponseHandler<T> handler){
log.info("执行Http Het请求,请求URI = {}",uri.getPath());
HttpGet httpGet = new HttpGet(uri);
httpGet.setConfig(RequestConfig
.copy(defaultRequestConfig)
.setSocketTimeout(10000)
.setConnectTimeout(10000)
.setConnectionRequestTimeout(10000)
.build());
if(headers != null && headers.length > 0)
httpGet.setHeaders(headers);
T execute = null;
try {
execute = httpclient.execute(httpGet, handler);
} catch (IOException e) {
log.info("执行Http Het请求出错,errorMsg = {}",e);
}
return execute;
}
}
我不管,我要分