okhttp和HttpURLConnection之间的区别是什么?

19

这两个库有什么区别?

据我了解,这两个库之间有差异,因为Volley使用httpurlconnection,而Retrofit使用okhttp....

但是我不明白它们之间的区别以及两种解决方案的优缺点。什么时候应该使用okhttp,什么时候应该使用httpurlconnection?

我希望能够知道这些信息,这样我就可以知道应该何时使用它们。

编辑:

为什么Android使用okhttp替代httpurlconnection?在此之前,如果我没错的话,httpurlconnection没有使用okhttp。


2
项目的历史在这里解释:http://fragmentedpodcast.com/episodes/46/ - Jesse Wilson
3个回答

11

okHttp的优点 okHttp可以轻松自定义每个请求,例如为每个请求设置超时等。 当网络故障时,okHttp会保持不断尝试连接,甚至在出现常见的连接问题时也会默默地恢复连接。如果您的服务有多个IP地址,则在第一次连接失败后,okHttp将尝试备用地址。

您可以获取任何请求的完整分析数据,例如发送的字节数、接收的字节数和每个请求所花费的时间等。这些数据对于查找应用程序的数据使用量和每个请求所花费的时间以及识别慢速请求非常重要。

使用okHttp非常简单。它的请求/响应API采用流畅的构建器和不变性设计。它支持同步阻塞调用和带有回调的异步调用。

okHttp支持Android 2.3及以上版本,对于Java的最低要求是1.7。


5
HttpUrlConnection 无法实现这个吗? - IgorGanapolsky
重定向 - ismail alaoui

7

HttpURLConnection

优点:

  • 轻量级API有助于更容易地管理和减少兼容性问题。
  • 通过HttpResponseCache的帮助,自动处理缓存机制。
  • 减少网络使用和电池消耗。

查询参数:

    URI baseUri = new URI("www.exemple.com/search");
URI uri = applyParameters(baseUri, "word","java");
HttpURLConnection connection = 
    (HttpURLConnection) uri.toURL().openConnection();
connection.setDoInput(true);
connection.setDoOutput(false);
connection.setRequestMethod("GET");
connection.connect();
if (connection.getResponseCode() == 
   HttpURLConnection.HTTP_OK) {
   // ...
}

Android头文件示例:

conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("CustomHeader", token);

OkHttp

优点:

  • 连接池
  • Gzip压缩
  • 缓存
  • 从网络问题中恢复
  • 重定向
  • 重试
  • 支持同步和异步调用

查询参数:

HttpUrl.Builder urlBuilder = HttpUrl.parse("https://httpbin.org/get").newBuilder();
urlBuilder.addQueryParameter("website", "www.journaldev.com");
urlBuilder.addQueryParameter("tutorials", "android");
String url = urlBuilder.build().toString();

Request request = new Request.Builder()
                     .url(url)
                     .build();

Android Headers示例:

Request request = new Request.Builder()
    .header("Authorization", "replace this text with your token")
    .url("your api url")
    .build();

如何在Retrofit中实现这个功能? - Taimoor Khan

3

这些API是不同的,个人更喜欢OkHttp的API。

请注意,从Android 4.4开始,网络层(包括HttpUrlConnection API)是通过OkHttp实现的。


3
谢谢,Marco。但我也想了解它们之间的区别和使用情况…我不明白它们之间的区别。那么,从Android 4.4开始,网络层就是OkHttp了吗?那HttpURLConnection呢? - user155293
HTTPURLConnection是OkHttp的包装器,并符合Java HTTPURLConnection规范。 - Bob9630

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接