Articles of okhttp3

java.net.SocketTimeoutException:timeout

使用OkHttp库,应用程序面临以下SocketTimeoutException问题。 如果请求大小较小,那么它工作正常(小于1MB)。 我在10秒内收到此exception,即使我的套接字超时( readTimeout )值更高。 它始终无法满足请求(大小为1.8MB)。 当我用HttpUrlConnection执行请求时它工作正常。 什么可能是失败的原因? 03-29 12:16:38.997 32066-4018/com.mobile W/System.err: java.net.SocketTimeoutException: timeout 03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okio.Okio$3.newTimeoutException(Okio.java:207) 03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okio.AsyncTimeout.exit(AsyncTimeout.java:261) 03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okio.AsyncTimeout$1.write(AsyncTimeout.java:158) 03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:176) 03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okio.RealBufferedSink.write(RealBufferedSink.java:46) 03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okhttp3.internal.http.Http1xStream$FixedLengthSink.write(Http1xStream.java:286) 03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at […]

OkHttpClient有一个最大重试计数

我正在为OkHttpClient设置连接失败的重试选项。 client = new OkHttpClient(); client.setRetryOnConnectionFailure(true); 我想知道它会继续尝试多less次。 看看源代码,我没有看到任何最大限​​制。 如何configuration客户端在几次尝试后停止尝试?

Android java.security.cert.CertPathValidatorException:找不到证书path的信任锚点

有三个主机,一个Android应用程序进行身份validation和授权。 最终主机是REST API。 这是第一次使用Oauthauthentication和授权过程,没有问题。 但是,如果用户在login后杀死应用程序 ,并访问REST API提供的服务,然后再次打开应用程序,则会出现此问题。 在这个时候authentication和授权过程不会发生,只有REST API。 它导致java.security.cert.CertPathValidatorException 但它在第一次使用(login,然后使用应用程序)期间工作。 有人可以解释这个例外背后的情况,什么是错的应用程序。 根据这个答案,如果authentication例外被忽略, 这是有效的 。 SSLSocketFactory sslSocketFactory = null; try { TrustManagerFactory tmf = TrustManagerFactory.getInstance( TrustManagerFactory.getDefaultAlgorithm()); // Initialise the TMF as you normally would, for example: try { tmf.init((KeyStore)null); } catch(KeyStoreException e) { e.printStackTrace(); } TrustManager[] trustManagers = tmf.getTrustManagers(); final X509TrustManager origTrustmanager = (X509TrustManager)trustManagers[0]; // […]

使用okHttp3上传dynamic文件数量

如何使用OkHttp v3pipe理dynamicfile upload,我已经使用compile 'com.squareup.okhttp:okhttp:2.6.0'旧版本实现了compile 'com.squareup.okhttp:okhttp:2.6.0' 类Form和Multipart有一些变化,现在build模。 他们用更强大的FormBody和FormBody.Builder组合replace了不透明的FormEncodingBuilder。 同样,他们已经将MultipartBuilder升级为MultipartBody,MultipartBody.Part和MultipartBody.Builder。 下面的代码是旧版本的 final MediaType MEDIA_TYPE = MediaType.parse(AppConstant.arrImages.get(i).getMediaType()); //If you can have multiple file types, set it in ArrayList MultipartBuilder buildernew = new MultipartBuilder() .type(MultipartBuilder.FORM) .addFormDataPart("title", title); //Here you can add the fix number of data. for (int i = 0; i < AppConstants.arrImages.size(); i++) { //loop to add […]

如何获得OkHttp3redirect的URL?

有没有办法获得请求的最终url? 我知道我可以禁用redirect,并自己,但有没有办法获得我加载的当前url? 就像,如果我要求a.com并被redirect到b.com,有没有办法获得urlb.com的名称?

改造:服务器返回ETag和Cache-Control:max-age = 60。 如果请求<60s,不应该使用caching吗?

我正在使用Retrofit,configuration为使用OkHttpcaching。 我打电话给这个api: https Cache-Control: public, max-age=60, s-maxage=60它返回一个Etag和一个Cache-Control: public, max-age=60, s-maxage=60头文件。 我在不到60秒的时间内发出了两个请求,所以我希望第二个请求根本不会执行任何networking,并且根据Cache-Control指令使用caching。 但那不是我所看到的。 我猜这是因为Etag指令优先? 这是正确的/正常的/预期的行为?

无法从caching中加载数据okHttp&retrofit

这里是我的代码,我打电话给API,也定义cachingokhttp改造: public class DemoPresenter { DemoView vDemoView; private Context mContext; public DemoPresenter(Context mcontext, DemoView vDemoView) { this.vDemoView = vDemoView; this.mContext = mcontext; } public void callAllProduct() { if (vDemoView != null) { vDemoView.showProductProgressBar(); } OkHttpClient okHttpClient = new OkHttpClient.Builder() .cache(new Cache(mContext.getCacheDir(), 10 * 1024 * 1024)) // 10 MB .addInterceptor(new Interceptor() { @Override public okhttp3.Response […]

OKHTTP 3跟踪分段上传进度

我怎样才能跟踪OkHttp 3的上传进度我可以find答案v2但不是v3,像这样 来自OkHttp食谱的示例Multipart请求 private static final String IMGUR_CLIENT_ID = "…"; private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png"); private final OkHttpClient client = new OkHttpClient(); public void run() throws Exception { // Use the imgur image upload API as documented at https://api.imgur.com/endpoints/image RequestBody requestBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("title", "Square Logo") .addFormDataPart("image", "logo-square.png", RequestBody.create(MEDIA_TYPE_PNG, new File("website/static/logo-square.png"))) […]

使用okHttp上传图片

我想用okhttp上传图片,但是我找不到MultipartBuilder for Post Image.What我可以使用,而不是这个。 这是我的代码 public static JSONObject uploadImage(File file) { try { final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png"); RequestBody req = new MultipartBuilder().setType(MultipartBody.FORM).addFormDataPart("userid", "8457851245") .addFormDataPart("userfile","profile.png", RequestBody.create(MEDIA_TYPE_PNG, file)).build(); Request request = new Request.Builder() .url("url") .post(req) .build(); OkHttpClient client = new OkHttpClient(); Response response = client.newCall(request).execute(); Log.d("response", "uploadImage:"+response.body().string()); return new JSONObject(response.body().string()); } catch (UnknownHostException | UnsupportedEncodingException e) […]

与retrofit2&OkHttp3得到这个错误。 无法parsing主机“<主机名>”:没有与主机名关联的地址

我正在使用retrofit 2和OkHttp3从服务器请求数据。 我刚刚添加了一个脱机caching代码,但它没有按预期工作。 我收到错误“无法parsing主机”<>“:没有与主机名关联的地址。” 当它尝试从caching中获取检索数据时(当没有Internet连接时),就会发生这种情况。 下面的代码片段。 public static Interceptor provideCacheInterceptor() { return new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Response response = chain.proceed(chain.request()); // re-write response header to force use of cache CacheControl cacheControl = new CacheControl.Builder() .maxAge(2, TimeUnit.MINUTES) .build(); return response.newBuilder() .header(CACHE_CONTROL, cacheControl.toString()) .build(); } }; } public static Interceptor […]