打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
httpclient org.apache.http.NoHttpResponseException: host:端口 failed to respond 错误原因和解决方法
import com.google.api.client.http.ByteArrayContent;import com.google.api.client.http.GenericUrl;import com.google.api.client.http.HttpBackOffUnsuccessfulResponseHandler;import com.google.api.client.http.HttpContent;import com.google.api.client.http.HttpHeaders;import com.google.api.client.http.HttpRequest;import com.google.api.client.http.HttpRequestFactory;import com.google.api.client.http.HttpResponse;import com.google.api.client.http.HttpStatusCodes;import com.google.api.client.http.HttpTransport;import com.google.api.client.http.apache.ApacheHttpTransport;import com.google.api.client.util.BackOff;import java.io.IOException;import java.io.InputStream;import java.net.ProxySelector;import java.util.Map;import java.util.Timer;import java.util.TimerTask;import java.util.concurrent.TimeUnit;import javax.annotation.PreDestroy;import lombok.Data;import lombok.extern.slf4j.Slf4j;import org.apache.http.HeaderElement;import org.apache.http.HeaderElementIterator;import org.apache.http.HttpHost;import org.apache.http.conn.ClientConnectionManager;import org.apache.http.conn.ConnectionKeepAliveStrategy;import org.apache.http.conn.params.ConnManagerParams;import org.apache.http.conn.params.ConnPerRouteBean;import org.apache.http.conn.scheme.PlainSocketFactory;import org.apache.http.conn.scheme.Scheme;import org.apache.http.conn.scheme.SchemeRegistry;import org.apache.http.conn.ssl.SSLSocketFactory;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;import org.apache.http.impl.conn.ProxySelectorRoutePlanner;import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;import org.apache.http.message.BasicHeaderElementIterator;import org.apache.http.params.BasicHttpParams;import org.apache.http.params.HttpConnectionParams;import org.apache.http.params.HttpParams;import org.apache.http.protocol.HTTP;import org.apache.http.protocol.HttpContext;/** * @author Li Sheng */@Slf4jpublic class HttpClientUtils {  private static HttpRequestFactory requestFactory;  private static HttpTransport httpTransport;  private static final String CONTENT_TYPE_JSON = "application/json";  private static final int CACHE_SIZE = 4096;  static {    HttpParams params = new BasicHttpParams();    HttpConnectionParams.setStaleCheckingEnabled(params, false);    HttpConnectionParams.setSocketBufferSize(params, 245760); // 8k(8192) * 30    ConnManagerParams.setMaxTotalConnections(params, 400);    ConnManagerParams.setMaxConnectionsPerRoute(params, new ConnPerRouteBean(200));    SchemeRegistry registry = new SchemeRegistry();    registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));    registry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));    ClientConnectionManager connectionManager = new ThreadSafeClientConnManager(params, registry);    DefaultHttpClient defaultHttpClient = new DefaultHttpClient(connectionManager, params);    defaultHttpClient.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(0, false));    defaultHttpClient        .setRoutePlanner(new ProxySelectorRoutePlanner(registry, ProxySelector.getDefault()));    ConnectionKeepAliveStrategy connectionKeepAliveStrategy = new ConnectionKeepAliveStrategy() {      @Override      public long getKeepAliveDuration(org.apache.http.HttpResponse httpResponse,          HttpContext httpContext) {        return 20 * 1000; // 20 seconds,because tomcat default keep-alive timeout is 20s      }    };    defaultHttpClient.setKeepAliveStrategy(connectionKeepAliveStrategy);    httpTransport = new ApacheHttpTransport(defaultHttpClient);    requestFactory = httpTransport.createRequestFactory();  }  @Data  public static class PostParam {    private Integer connectTimeoutMills;  // 可选,默认 20s    private Integer readTimeoutMills;  // 可选,默认 20s    private Map<String, String> headers; // 可选    private String url; //必填    private String postJson; //必填    private Boolean readResponseData; //必填:是否需要读取数据。如果不需要返回结果,设置 false    private BackOff backOff; //可选,重试机制策略    private String authorization; //可选    public PostParam(String url, String postJson, boolean readResponseData) {      this.url = url;      this.postJson = postJson;      this.readResponseData = readResponseData;    }  }  public static String postWithJson(PostParam postParam) {    GenericUrl genericUrl = new GenericUrl(postParam.getUrl());    HttpContent httpContent = ByteArrayContent.fromString(null, postParam.getPostJson());    HttpResponse httpResponse = null;    try {      HttpRequest httpRequest = requestFactory.buildPostRequest(genericUrl, httpContent);      if (postParam.getConnectTimeoutMills() != null) {        httpRequest.setConnectTimeout(postParam.getConnectTimeoutMills());      }      if (postParam.getReadTimeoutMills() != null) {        httpRequest.setReadTimeout(postParam.getReadTimeoutMills());      }      if (postParam.getBackOff() != null) {        httpRequest.setUnsuccessfulResponseHandler(            new HttpBackOffUnsuccessfulResponseHandler(postParam.getBackOff()));      }      HttpHeaders httpHeaders = new HttpHeaders();      httpHeaders.setContentType(CONTENT_TYPE_JSON);      Map<String, String> headers = postParam.getHeaders();      if (headers != null && headers.size() > 0) {        headers.forEach(httpHeaders::set);      }      if (postParam.getAuthorization() != null && !postParam.equals("")) {        httpHeaders.setAuthorization(postParam.getAuthorization());      }      httpRequest.setHeaders(httpHeaders);      httpResponse = httpRequest.execute();      if (httpResponse.getStatusCode() != HttpStatusCodes.STATUS_CODE_OK) {        log.error("http status not 200. param:{},status:{},msg:{}", postParam,            httpResponse.getStatusCode(), httpResponse.getStatusMessage());        return null;      }      Boolean readResponseData = postParam.getReadResponseData();      if (readResponseData != null && readResponseData) {        InputStream inputStream = httpResponse.getContent();        if (inputStream != null) {          StringBuffer out = new StringBuffer();          byte[] b = new byte[CACHE_SIZE];          for (int n; (n = inputStream.read(b)) != -1; ) {            out.append(new String(b, 0, n));          }          return out.toString();        }      }    } catch (Exception e) {      log.error("post exception,param:{}", postParam, e);    } finally {      try {        if (httpResponse != null) {          httpResponse.disconnect();        }      } catch (Exception e) {        log.error("httpResponse disconnect exception", e);      }    }    return null;  }  @PreDestroy  public static void destory() {    try {      log.info("httpTransport shutdown now....");      httpTransport.shutdown();    } catch (IOException e) {      log.error("shut down httpTransport exception", e);    }  }}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Android Post Get(最新 HttpClient 事例)
httpclient
spring集成httpclient连接池配置
[原]Java模拟新浪和腾迅自动登录并发送微博(2013年3月更新可用) | IT瘾
HttpClient-aaaaa
HTTP
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服