Bas*_*sic 168 java apache-commons-httpclient apache-httpclient-4.x
我要做的就是下载一些JSON并将其反序列化为一个对象.我还没有下载JSON.
我能找到的几乎所有HttpClient示例,包括apache站点上的那些看起来都像......
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
public void blah() {
HttpClient client = new DefaultHttpClient();
...
}
Run Code Online (Sandbox Code Playgroud)
但是,Netbeans告诉我,这DefaultHttpClient
已被弃用.我已经尝试使用谷歌搜索DefaultHttpClient deprecated
和其他许多变化,我无法找到任何有用的结果,所以我显然错过了一些东西.
下载网页内容的正确Java7方式是什么?作为语言的一部分,真的没有像样的Http客户端吗?我觉得很难相信.
我对Maven的依赖是......
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>LATEST</version>
<type>jar</type>
</dependency>
Run Code Online (Sandbox Code Playgroud)
Nis*_*hth 256
相关进口:
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import java.io.IOException;
Run Code Online (Sandbox Code Playgroud)
用法:
HttpClient httpClient = HttpClientBuilder.create().build();
Run Code Online (Sandbox Code Playgroud)
编辑(在Jules的建议之后):
由于build()
方法返回一个CloseableHttpClient
它是-一个 AutoClosable
,你可以放置在一个try-与资源语句(Java 7+)的声明:
try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
// use httpClient (no need to close it explicitly)
} catch (IOException e) {
// handle
}
Run Code Online (Sandbox Code Playgroud)
Chr*_*ssy 59
恕我直言,接受的答案是正确的,但错过了一些"教学",因为它没有解释如何提出答案.对于所有已弃用的类,请查看JavaDoc(如果您没有下载或上线),它将提示用于替换旧代码的类.当然它不会告诉你一切,但这是一个开始.例:
...
*
* @deprecated (4.3) use {@link HttpClientBuilder}. <----- THE HINT IS HERE !
*/
@ThreadSafe
@Deprecated
public class DefaultHttpClient extends AbstractHttpClient {
Run Code Online (Sandbox Code Playgroud)
现在你有了要使用的类HttpClientBuilder
,因为没有构造函数来获取构建器实例,你可能会猜测必须有一个静态方法:create
.一旦你有了构建器,你也可以猜测,对于大多数构建器,有一个构建方法,因此:
org.apache.http.impl.client.HttpClientBuilder.create().build();
Run Code Online (Sandbox Code Playgroud)
AutoClosable:
正如Jules在评论中暗示的那样,返回的类实现了java.io.Closable
,所以如果你使用Java 7或更高版本,你现在可以:
try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {...}
Run Code Online (Sandbox Code Playgroud)
优点是您不必处理finally和null.
其他相关信息
Iva*_*nRF 10
Apache的例子使用这个:
HttpClient httpclient = HttpClients.createDefault();
Run Code Online (Sandbox Code Playgroud)
org.apache.http.impl.client.HttpClients
从4.3版开始,该课程就在那里.代码HttpClients.createDefault()
与此处的接受答案相同.
4.3-alpha1
由于LATEST
版本规范,在您使用的版本中已弃用.如果您看一下该类的javadoc,它会告诉您使用什么:HttpClientBuilder
.
在最新的稳定版本(4.2.3
)中,DefaultHttpClient
尚未弃用.
尝试jcabi-http
,这是一个流畅的Java HTTP客户端,例如:
String html = new JdkRequest("https://www.google.com")
.header(HttpHeaders.ACCEPT, MediaType.TEXT_HTML)
.fetch()
.as(HttpResponse.class)
.assertStatus(HttpURLConnection.HTTP_OK)
.body();
Run Code Online (Sandbox Code Playgroud)
请查看此博客文章:http://www.yegor256.com/2014/04/11/jcabi-http-intro.html