Articles of okhttp

你如何防止Retrofit自动跟随302

我有一个身份validation调用,我正在尝试使用Android上的Retrofit。 该调用将302返回到成功或失败页面。 原始302响应会返回维护身份validation成功所需的会话cookie,但是在我有机会使用cookie之前,Retrofit会自动将请求移交给重定向URL。 有没有办法阻止重定向? 或者有没有办法在Retrofit上编写响应处理程序,可以在进行第二次调用之前添加适当的标头?

Android使用OKHTTP单例进行并行查询的正确方法

我正在开发一个android项目,我计划用OKHTTP客户端替换Apache httpclient实现。 我想知道如何创建一个全局客户端,可以用于将使用客户端multithreading的不同活动和服务中的网络请求。 我应该创建一个OKHTTPClient的单例对象并在我的代码中重用它吗? 此外,我应该在哪里将cookiestore添加到请求中,在客户端的全局定义中,以便我所有请求都可以使用cookie或在个人活动或服务中形成请求?

使用Retrofit 2.0 POST方法获取请求正文内容

在进行enque操作之前,我需要获取请求体并使用Retrofit 2.0执行一些逻辑操作。 但遗憾的是,我无法通过服务电话获取post正文内容。 在搜索了很多之后,我发现只有一个解决方案,比如使用HttpLoggingInterceptor和OkHttpClient来logging我使用Retrofit 2.0从这个方法发布的request 。 我使用以下代码在Android Logcat中记录请求正文: HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); logging.setLevel(Level.BODY); OkHttpClient httpClient = new OkHttpClient(); httpClient.interceptors().add(logging); Retrofit retrofit = new Retrofit.Builder() .baseUrl(baseURL) .addConverterFactory(GsonConverterFactory.create()) .build(); return retrofit.create(apiClass); 问题我面对上述方法: 请求正文仅在默认的Android Logcat上看到 02-04 01:35:59.235 5007-5035/com.example.retrofitdemo D/OkHttp:{“nameValuePairs”:{“id”:”1″,”name”:”chandru”,”type”:”user”}} 但是上面的方法只返回logcat中的响应体,我无法将它作为String或JSONObject 。 尽管如果我能够使用HttpLoggingInterceptor获取响应体,我的请求体将始终显示在Logcat中,标签为“OkHttp”,即使在应用程序进入生产之后也是如此(因此,这主要是为了解决这种问题。在logcat中发布数据)。 我的要求: 我需要将请求体作为String或JSONObject或任何方法获取,而不会在Logcat中修改post数据。 我尝试了什么: 我甚至在从Response response onResponse之后尝试获取请求体,但是我无法完成它。 请find我为此目的使用的代码,如下所示: Gson gson = new Gson(); String responseString = […]

如何在Android设备上使用http / 2和Okhttp?

我正在测试一个支持HTTP / 2的站点, 就像这样 ,我尝试使用okhttp发送请求: OkHttpClient okHttpClient = new OkHttpClient(); Request request = new Request.Builder() .url(“https://www.google.it”) .build(); okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) { e.printStackTrace(); } @Override public void onResponse(Response response) throws IOException { Log.d(“TestHttp”, “OkHttp-Selected-Protocol: ” + response.header(“OkHttp-Selected-Protocol”)); Log.d(“TestHttp”, “Response code is ” + response.code()); } }); 在日志中我得到了这样的东西: OkHttp-Selected-Protocol: http/1.1 […]

我们应该使用谷歌的安全提供商与OkHttp?

我们在Android项目中使用okhttp与我们的API交谈; 所有通信都使用SSL / TLS加密,我们的服务器可以说SPDY。 我们还在Google Play服务中为融合位置提供商和其他一些function进行链接。 我们目前没有使用的Play服务的一部分是他们的安全提供商 ,它承诺升级设备的SSL堆栈以某种方式防止各种漏洞。 但是,文档对于提供程序实际执行的操作以及SSL方法受其影响的内容有些模糊,哪些不是(提供了一些示例,但不是全面的列表)。 所以,我想我的问题是双重的: 动态安全提供程序是否可以使用okhttp,或者okhttp是否依赖于不受安装提供程序影响的较低级别(或更高级别)的API? 假设它确实有效,有什么好处? 是否值得关注安全方面的好处? 它实际上是否会修复okhttp 2.2中与ALPN相关的本机崩溃,正如nfuller暗示的那样 ?

为什么异步网络调用的回调方法在活动结束后不会导致内存泄漏?

我们知道匿名内部类可能会导致内存泄漏。 但是为什么它在异步网络调用时不起作用。 例如: OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .get() .url(url) .build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { // String str = response.body().string(); // do sth to our View, but those views […]

OkHttpClient是否具有最大重试次数

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

在Android中下载RxJava,OkHttp和Okio的进度

在我们的应用程序中,我使用此代码下载图像文件。 我需要在UI上显示下载进度( 以百分比forms下载的字节数 )。 我如何在此代码中获得下载进度? 我搜索了解决方案,但仍无法自行完成。 Observable downloadObservable = Observable.create( sub -> { Request request = new Request.Builder() .url(media.getMediaUrl()) .build(); Response response = null; try { response = http_client.newCall(request).execute(); if (response.isSuccessful()) { Log.d(TAG, “response.isSuccessful()”); String mimeType = MimeTypeMap.getFileExtensionFromUrl(media.getMediaUrl()); File file = new File(helper.getTmpFolder() + “/” + helper.generateUniqueName() + “test.” + mimeType); BufferedSink sink = Okio.buffer(Okio.sink(file)); […]

改造2.0b2:如何从响应中获取InputStream?

我正在使用Retrofit 2.0b2。 得到回复后,我尝试通过以下方式从响应中获取InputStream: Response response = call.execute(); InputStream is = response.raw().body().byteStream(); 但应用程序继续投掷: java.lang.IllegalStateException: Cannot read raw response body of a converted body. at retrofit.OkHttpCall$NoContentResponseBody.source(OkHttpCall.java:184) at com.squareup.okhttp.ResponseBody.byteStream(ResponseBody.java:43) at … 尽管响应正确返回。 我在这做错了什么?

广场`s OkHttp。 下载进度

使用square`s OkHttp时有什么方法可以下载文件进度吗? 我没有在食谱中find任何解决方案。 他们有类Call可以异步获取内容,但是没有方法可以获得当前进度。