当前位置: 首页 > 面试题库 >

不建议使用httpClient.getConnectionManager()-应该改用什么?

尤夕
2023-03-14
问题内容

我已经继承了代码

import org.apache.http.client.HttpClient;
...
HttpClient httpclient = createHttpClientOrProxy();

    try {
        HttpPost postRequest = postRequest(data, url);
        body = readResponseIntoBody(body, httpclient, postRequest);
    } catch( IOException ioe ) {
        throw new RuntimeException("Cannot post/read", ioe);
    } finally {
        httpclient.getConnectionManager().shutdown();  // ** Deprecated
    }


private HttpClient createHttpClientOrProxy() {
    HttpClient httpclient = new DefaultHttpClient();

    /*
     * Set an HTTP proxy if it is specified in system properties.
     * 
     * http://docs.oracle.com/javase/6/docs/technotes/guides/net/proxies.html
     * http://hc.apache.org/httpcomponents-client-ga/httpclient/examples/org/apache/http/examples/client/ClientExecuteProxy.java
     */
    if( isSet(System.getProperty("http.proxyHost")) ) {
        log.warn("http.proxyHost = " + System.getProperty("http.proxyHost") );
        log.warn("http.proxyPort = " + System.getProperty("http.proxyPort"));
        int port = 80;
        if( isSet(System.getProperty("http.proxyPort")) ) {
            port = Integer.parseInt(System.getProperty("http.proxyPort"));
        }
        HttpHost proxy = new HttpHost(System.getProperty("http.proxyHost"), port, "http");
// @Deprecated methods here... getParams() and ConnRoutePNames
        httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
    }
    return httpclient;
}

getConnectionManager() 读为“

@Deprecated
ClientConnectionManager getConnectionManager()

Deprecated. (4.3) use HttpClientBuilder.
Obtains the connection manager used by this client.

HttpClientBuilder的文档似乎很稀疏,只是说:

Builder for CloseableHttpClient instances.

但是,如果我HttpClientCloseableHttpClient该方法替换仍然出现@Deprecated

如何使用不推荐使用的方法?


问题答案:

不用创建的新实例,而是HttpClient使用Builder。你会得到一个CloseableHttpClient

例如用法:

CloseableHttpClient httpClient = HttpClientBuilder.create().setProxy(proxy).build()

而不是使用getConnectionManager().shutdown(),而是使用close()方法CloseableHttpClient



 类似资料:
  • 问题内容: 我最近一直在使用Hibernate 3.5和Spring 3进行一些工作,但是我对Hibernate还是比较陌生,并认为Spring中的类使将Hibernate与我的域类一起使用变得容易且容易。 但是,在搜索一个不相关的问题时,我看到有人提到,这不是使用Spring和Hibernate的最佳方法。任何人都可以阐明以下几点: 为什么不推荐? 整合Hibernate和Spring的最佳方法

  • 问题内容: Java文档似乎并未提及有关的弃用的任何内容,但我一直很早就听说过它的弃用情况。是因为它具有错误/错误而被弃用,还是整体上更好使用? 我有一些使用的代码,我想知道我是否应该认真考虑将其重构为使用,还是弃用纯粹是为了方便而我的代码是安全的。 问题答案: 从javadoc中获取StringTokenizer: 是旧类,出于兼容性原因保留,尽管在新代码中不鼓励使用它。建议任何寻求此功能的人改

  • 问题内容: 我找不到任何解释为什么Apache Lang3 v3.7中不推荐使用StringEscapeUtils。 https://commons.apache.org/proper/commons- lang/apidocs/org/apache/commons/lang3/StringEscapeUtils.html 我们现在应该使用什么来进行HTML转义/转义 问题答案: 班级已从包裹中移

  • 问题内容: 为什么不推荐使用? 问题答案: 在javadoc中说为什么。被设计为低负载并发的一种简单解决方案,但它甚至无法解决: 请注意,SingleThreadModel不能解决所有线程安全问题。例如,即使使用SingleThreadModel servlet,会话属性和静态变量仍然可以同时由多个线程上的多个请求访问。建议开发人员采取其他方法解决这些问题,而不要实现此接口,例如,避免使用实例变量

  • 问题内容: 触发服务器调用以获取componentWillMount生命周期方法中的数据是一种不好的做法? 以及为什么最好使用componentDidMount。 问题答案: 更新: componentWillMount将很快被弃用。 引用@Dan Abramov 在 React的未来版本中,我们期望componentWillMount 在某些情况下 会触发多次 ,因此您应该对网络请求使用comp

  • 问题内容: 我了解到MySQL可以压缩服务器和客户端之间的通信。 如果客户端和服务器均支持zlib压缩,并且客户端请求压缩,则使用压缩。 (来自MySQL Forge Wiki ) 最明显的利弊是 优点:有效载荷尺寸减小 缺点:增加了计算时间 那么,只要我能负担得起具有足够规格的服务器,就应该启用压缩协议吗?我还要考虑其他因素吗? 问题答案: 除了网络带宽和数据库服务器及其客户端之间的延迟之外,性