Articles of okhttp3

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 […]

使用Google Volley的SSL固定

我提到我到目前为止所尝试的是开始我的问题: 我没有在我的应用程序中的证书,我只使用SHA256密钥,大多数互联网上的答案需要在应用程序中的物理证书加载到密钥库中,我没有。 我收到以下错误: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 1) TrustKit它需要编译SDK 24及以上,但我有23和许多支持库与SDK 23同步,所以我不能改变所有这些,它可能会在一段时间崩溃我的应用程序。 2) CWAC-NetSecurity我已经在我的代码中实现了这个function,而没有使用Android N安全设置,我也遵循了git页面给出的指令,但是不能从sslSocketfactory传递给Volley,它有OkHTTP的例子。 所以也出现以上错误。 我已经用OKHttp的CertificatePinner试过了,它也不适合我。 同样的错误。 我也试图将hostNameVerifier和sslSocketFactory传递给HttpsUrlConnection,但同样的错误。 JsonObjectRequestSolaire jsonRequest = new JsonObjectRequestSolaire(method, URL, object, headers, responseListener, errorListener); RetryPolicy policy = new DefaultRetryPolicy(TIMEOUT, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT); jsonRequest.setRetryPolicy(policy); jsonRequest.setShouldCache(false); OkHttpClient okHttpClient = new OkHttpClient.Builder() .certificatePinner(new CertificatePinner.Builder() .add("my_domain", "sha256/shaKey")//example.com .add("my_domain", "sha256/shaKey")//also tried *.example.com […]