Articles of okhttp3

如何在Android中的OKHTTP 3.x中动态(或循环)发送post参数?

我正在使用OKHTTP 3.x版本。 我想发布多个参数,并希望在循环中添加参数。 我知道在2.x版中,我可以使用FormEncodingBuilder并在循环中添加params,然后从中创建一个请求体。 但在3.x中,该类已被删除。 这是我目前的代码: RequestBody formBody = new FormBody.Builder() .add(“Param1”, value1) .add(“Param2”, value2) .build(); Request request = new Request.Builder() .url(“url”) .post(formBody) .build(); 现在我想添加5个参数,但是在循环中,即通过在循环中构建formbody来创建请求体。 就像我上面写的,我知道如何在OKHTTP版本2.x中执行它,但我使用的是版本3.x. 任何帮助或指导表示赞赏。 提前致谢

CertPathValidatorException:找不到证书路径的信任锚

我将HTTPPinning添加到OKHTTPClient,示例代码是: OkHttpClient client = new OkHttpClient(); client.setSslSocketFactory(getPinnedCertSslSocketFactory(context)); private SSLSocketFactory getPinnedCertSslSocketFactory(Context context) { try { KeyStore trusted = KeyStore.getInstance(“BKS”); InputStream incontext.getResources().openRawResource(R.raw.prod_keystore); trusted.load(in, “venkat@123”.toCharArray()); SSLContext sslContext = SSLContext.getInstance(“TLS”); TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance( TrustManagerFactory.getDefaultAlgorithm()); trustManagerFactory.init(trusted); sslContext.init(null, trustManagerFactory.getTrustManagers(), null); return sslContext.getSocketFactory(); } catch (Exception e) { Log.e(“MyApp”, e.getMessage(), e); } return null; } 我将应用程序上传到Playstore,从过去1年开始,它就运行良好。 但从最近1周开始,它给出了以下问题,我使用了版本com.squareup.okhttp的OkHttp:okhttp:2.7.4 java.security.cert.CertPathValidatorException: Trust anchor for […]

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