我正在使用以下依赖项(Raturofit和Okhttp). implementation 'com.squareup.retrofit2:retrofit:2.3.0' implementation 'com.squareup.retrofit2:converter-gson:2.3.0' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' implementation 'com.squareup.okhttp3:okhttp:3.10.0' implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0' 以下是我的代码: OkHttpClient okHttpClient = new OkHttpClient.Builder() .addInterceptor(cache_interceptor)
以下是关于 okhttp 的编程技术问答
要提出HTTP请求,在Java中有一些API替代方案,例如Apache HTTPClient和Okhttp. Apache HttpClient已成熟且广泛使用,Okhttp似乎越来越流行(我不确定). 我想知道的是,哪个更好,或者Apache HTTPClient具有OKHTTP没有的某些功能,或者相反?通常,我在服务器方面说话,谈论在Android应用中使用也很高兴. 我希望可以列出一些要点,因此我可以弄清Apache HTTPClient和Okhttp. 之间的差异. 参考: urlconnection和httpclient之间有一个问题: urlConnection或httpclient:哪些提供更好的功能和更高的功能和更高的效率? 解决方案 我建议使用OKHTTP. 这是原因: > OKHTTP具有HTTP/2,内置响应缓存,Web插座和更简单的API.它的默认值更好,并且更易于高效使用.它具有更好的URL模型,更好的曲奇型号,更好的标题
如何成功地验证OKHTTP协商HTTP/2,而不是使用HTTPS/1.1?我可以检查响应中有一些信息吗? 谢谢 -tony 解决方案 仅供参考 该协议可以在响应对象中很容易看到. 其他解决方案 好吧,我想我得到了答案.如果我打印出响应标题,我会得到这个: OKHTTP选择协议:H2 我假设它成功协商了HTTP/2的响应? 谢谢! -tony 其他解决方案 您可以通过致电: 检查协议 Response response = client.newCall(request).execute(); // first get response from server Protocol protocol = response.protocol(); // check which protocol was used
许多人与我交谈,HttpurlConnection基于Android 4.4的OKHTTP. 但是,当我深入探讨OKHTTP的代码时,OkhttpurlConnection是一个从HttpurlConnection延伸的子类. 因此,Okhttp基于HttpurlConnection或HttpurlConnection基于OKHTTP? 我发现httpurlconnection的实现来自jdk的rt.jar. 我希望有人可以告诉我Okhttp和HttpurlConnection之间的真正关系 解决方案 我发现httpurlconnection的实现来自jdk的rt.jar. 否. Android在编译时或运行时不使用rt.jar. OKHTTP基于httpurlconnection或httpurlconnection基于OKHTTP? Android的abstract类的具体实现HttpURLConnection是基于Okhttp的叉
我使用OKHTTP库之间在服务器之间创建了一个有安全的Websocket连接.但是3分钟后,我的Websocket连接不断关闭.因此,我在下面添加了代码,以确保ping/pong: okHttpClient = new OkHttpClient.Builder() .pingInterval(20, TimeUnit.SECONDS) .build(); Request request = new Request.Builder().url(freeSwitchHost).build(); vertoWebSocket = okHttpClient.newWebSocket(request, pstnWebSocketListener); okHttpClient.dispatcher().executorService().shu
我正在尝试关注Raterofit的2 教程,代码的GsonConverterFactory显示错误Cannot resolve symbol: public class ServiceGenerator { public static final String API_BASE_URL = "http://your.api-base.url"; private static OkHttpClient httpClient = new OkHttpClient(); private static Retrofit.Builder builder = new Retrofit.Builder() .baseUrl(API_BASE_URL) //THIS IS THE LINE WITH ERROR!!!!!!!!!!!!
遇到了一个奇怪的问题,我无法在尝试后重现它.如何复制它以及为什么会发生? 这是一项非连续任务,在循环中调用HTTP连接. public static Response syncGet(URL url) throws IOException { log.debug("http url:{}", url); OkHttpClient client = new OkHttpClient().newBuilder().connectTimeout(15L, TimeUnit.SECONDS) .readTimeout(30L, TimeUnit.SECONDS).build(); Request request = new Request.Builder().url(url).get().addHeader("cache-control", "no-cache").build();
afaik android javax.net.net.net.sssl使用任何SSL/TLS的openssl/boringssl库. 意图:负载FIPS合规性在我的应用中openssl libaray,并制作 javax.net. SSL(OKHTTP)类使用该库? 类似于 wolfsssl提供商,但它不是JSSE兼容. 使用FIPS openssl+ Android可行,Android Java级别的配置是什么? 谢谢 解决方案 修改了OKHTTP和OKIO代码以使用Wolfssl Java包装器并使其正常工作. 现在,提出的任何HTTPS请求都将用于WolfSSL层,而不是库存Android Boringssl/OpenSSL. 其他解决方案 这是未经测试的库,然后使用java.security.security.insertproviderat安装该提供商作为首选提供商.还有有关如何编写这些提供商之一并在
我一直在调查这个问题,发现一些有趣的东西. 如果我使用的服务器密钥库将其存储在commomn名称中的服务器证书(真实域)与服务器建立连接,则可以正常工作,但是如果我使用 ip地址,则可以使用通用名称它不起作用,而仅在Android设备自制作的应用程序中(不是桌面浏览器或Android设备中的浏览器应用程序). ,事实证明此例外是主机名未验证 ,但奇怪的是在桌面或Android设备的浏览器中都很好 调查后,我发现我们可以构建自己的主机名验证者,该验证者可以为主机名添加异常,但是Android的默认验证程序如何工作?它必须是跳过 IP地址作为通用名称并返回false的代码. 我检查了Okhttp的源代码,发现了这一代码,它抛出了异常 ,但我找不到定制的主机名验证者. 有人可以为我提供一些有关此的暗示? 谢谢〜 更新:: 在我在Android Studio进行调试之后,在运行时间内实际上是OkhostNameVerifier 它检查主机名是
所以这是问题,我正在尝试为我的应用程序实现缓存,并遵循此教程 android:CACHE网络请求使用retrofit2和okhttp3 脱机访问.可悲的是,当没有互联网连接时,缓存的响应不会出现,而是 toast.maketext(getContext(),getContext(). 被执行.那么谁能告诉我我做错了什么?还是指导我解决这个问题?如果您问我,我会发布其他信息.以下是特定函数的整个代码. private void loadHomeLoggedPosts(String uid) { progressBar.setVisibility(View.VISIBLE); OkHttpClient client = new OkHttpClient .Builder() .cache(new Cache(getContext().getCacheDir(), 10 * 1024 * 1024)) // 10
我能够使用OKHTTP3获得JSON响应,并且我想使用Raturofit来解析响应以获取名称和图像.我查看了Ratrofit网站和一些教程,但该过程尚不清楚. 这是我的okhttp3代码,以获取JSON响应: Request request = new Request.Builder().url(url).build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { e.printStackTrace(); } @Override public void onResponse(Call call, Response response) throws IOException {
即使没有Internet连接(离线),但仍然没有成功,我想实现缓存,但已经看起来很多例子,但仍然没有运气 //FeedInterceptor Class public static Interceptor getOfflineInterceptor(final Context context){ Interceptor interceptor = new Interceptor() { @Override public okhttp3.Response intercept(Chain chain) throws IOException { Request request = chain.request(); if (!isNetworkAvailable(context)) { request = request.newBuilder()
我正在使用最后一个版本retrofit连接到Web服务,但是让我bellow错误: okhttp3.internal.http2.StreamResetException: stream was reset: PROTOCOL_ERROR 这个错误okhttp3.internal.http2.StreamResetException: stream was reset: CANCEL对于巨大的string?还是服务器的**nginx**? 我的代码就像波纹管: try { // Create a trust manager that does not validate certificate chains final TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager() { @Override
我是Okhttpclient的新手,我不知道如何存储1周的缓存. 因此,当代理更新数据时,它也将在1周后在移动设备中进行更新. 解决方案 您可以使用MaxAge和MaxStale CacheControl 的参数 MaxAge 设置了缓存响应的最大年龄.如果缓存响应的年龄超过MaxAge它将不使用,并且将提出网络请求 MaxStale 接受超过其新鲜度寿命的缓存响应,最高MaxStale.如果未指定,则不会使用陈旧的缓存响应 public Interceptor provideCacheInterceptor(final int maxDays) { return new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Response r
在我的生产应用程序上应用Proguard后.我们在从URL加载图像 上面临以下错误 E/vw: Glide failed to load image with exception: UNABLE TO LOAD PUBLICSUFFIXES.GZ RESOURCE FROM THE CLASSPATH. java.lang.IllegalStateException: Unable to load publicsuffixes.gz resource from the classpath. 最后,我们尝试使用以下命令将整个滑行源保持在progaurd配置中 -keep public class * implements com.bumptech.glide.module.GlideModule -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** { **[] $V
我正在使用网络模块,在该模块中应该提供离线数据,在此我从本地数据库中获取先前存储的JSON响应,并构建响应并返回应用程序.所有这些都在我的okhttp Interceptor上在应用程序级别发生.我知道我可以使用ConnectivityManager 检查N/W的可用性 每当我尝试使用N/W禁用或更改服务器false Server url进行测试时,调试器都会消失,呼叫chain.proceed(request) 请注意,我知道我会出现任何互联网错误的onFaluire restrofit的onFaluire.但是我不想要那个.相反,我希望在Interceptor内部处理并构建响应和返回. 在网上搜索找到了一个问题与此相似的问题. 让我知道是否需要任何清晰度. 解决方案 我知道这是非常古老的帖子,但是对于像我这样的人也遇到了这个问题. chain.proceed(request)呼叫将抛出异常,以便无法执行此下面的任何代码. 因此,如果您真的想执
我一直在研究 Sky Scanner API 以检索Android中的飞行票价和其他细节. 我正在使用 Retrofit2 进行网络调用.问题是在检索会话键 时遇到错误 错误 javax.net.ssl.SSLPeerUnverifiedException: Hostname partners.api.skyscanner.net not verified:certificate: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=DN:CN=api.skyscanner.net,OU=Infrastructure,O=Skyscanner Ltd,L=London,ST=London,C=GB apiclient public static Retrofit getRetrofit() { if (retrofit2 == null) { HttpLoggingIntercept
我正在尝试使用Retrofit 2.0进行API调用.在我的API电话中,我必须对此URL进行必要的电话 要在翻新中形成此URL,我一直在使用以下接口 @GET("Users?where=") Call> getFollowers(@Query("followings.objectId") String objectId); 此接口调用在查询参数之前放置一个andand,并生成如下 之类的URL 我试图通过路径注释来克服这一点,但我不断获得" url查询字符串必须替换块.对于使用@query的动态查询参数". 我试图连接的 API需要一个" where ="子句,以通过设计过滤.我无权改变.我想要的是某种程度上告诉Raterofit不要在查询参数或此问题的任何解决方法之前放置一个andand符号. 任何帮助都将不胜感激. 解决方案 对于那些寻求类似答案的人,我想到了以下解决方案 我声明了与@url 的接口 @GET
Google Image搜索URL看起来像 package com.paveynganpi.allsearch; import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.
我想从JSON获取数据,然后在数组中返回,但是数组始终使用null返回,因为我的程序不会进入OnResponse方法. 我想在recyclerview中显示这些数据.起初它起作用,但现在它不起作用,我不知道为什么... private SzabadEuMusorok[] getSzabadEuMusoroks(){ if (isNetworkAvaible()){ OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder().url("validurl").build(); Call call = client.newCall(request); call.enqueue(new Callback() { @Override public void onF