标签: okhttp

改造+ okhttp:检索GZIPInputStream

当我使用retrofit 1.4.1和okhttp 1.3.0在WS上激活gzip时,我遇到了问题.

RequestInterceptor requestInterceptor = new RequestInterceptor() {
            @Override
            public void intercept(RequestFacade request) {
                request.addHeader("content-type", "application/json");
                request.addHeader("accept-encoding", "gzip");  // Here is the problem
            }
        }; 
RestAdapter restAdapter = new RestAdapter.Builder()
            .setEndpoint(Constants.HOST)
            .setLogLevel(RestAdapter.LogLevel.FULL)
            .setRequestInterceptor(requestInterceptor)
            .build();
Run Code Online (Sandbox Code Playgroud)

如果我评论以下行request.addHeader("accept-encoding", "gzip");没有问题,但如果激活gzip,我会收到一个错误(我的请求落入failure).

这是我的logcat request.addHeader("accept-encoding", "gzip");

1326               Retrofit  D  : HTTP/1.1 200 OK
  1326               Retrofit  D  Cache-Control: public, max-age=600
  1326               Retrofit  D  Content-Encoding: gzip
  1326               Retrofit  D  Content-Length: 254
  1326               Retrofit  D  Content-Type: application/json
  1326               Retrofit  D  Date: Wed, 05 Feb 2014 …
Run Code Online (Sandbox Code Playgroud)

android retrofit okhttp

12
推荐指数
1
解决办法
8232
查看次数

我应该使用OkHttp和Volley库吗?

我在我的Android应用程序中使用Volley库.它工作正常,但我看到OkHttp也提供了一些更多的改进.我使用以下方法将OkHttp与Volley集成:

Volley.newRequestQueue(mCtx.getApplicationContext(), new OkHttpStack());
Run Code Online (Sandbox Code Playgroud)

我的OkHttpStack类是:

public class OkHttpStack extends HurlStack {
    private final OkUrlFactory mFactory;

    public OkHttpStack() {
        this(new OkHttpClient());
    }

    public OkHttpStack(OkHttpClient client) {
        if (client == null) {
            throw new NullPointerException("Client must not be null.");
        }
        mFactory = new OkUrlFactory(client);
    }

    @Override protected HttpURLConnection createConnection(URL url) throws IOException {
        return mFactory.open(url);
    }
}
Run Code Online (Sandbox Code Playgroud)

1)值得吗?我没有注意到任何明显的改进,但这可能是因为我还没有在我的服务器上实现SPDY支持.

2)OkHttp的增强功能是响应缓存.但是,凌空也是如此.我是否会遇到类似的问题:https://github.com/square/okhttp/issues/680

3)另外,我在Volley中使用两个RequestQueues - 一个用于图像,另一个用于JSON.我应该在两个队列中使用OkHttp吗?

android android-volley okhttp

12
推荐指数
2
解决办法
1万
查看次数

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

我们在Android项目中使用okhttp与我们的API交谈; 所有通信都使用SSL/TLS加密,我们的服务器可以说SPDY.我们还在Google Play服务中为融合位置提供商和其他一些功能进行链接.

我们目前没有使用的Play服务的一部分是他们的安全提供商,它承诺升级设备的SSL堆栈以某种方式防止各种漏洞.但是,文档对于提供程序实际执行的操作以及SSL方法受其影响的内容有些模糊,哪些不是(提供了一些示例,但不是全面的列表).

所以,我想我的问题是双重的:

  • 动态安全提供程序是否可以使用okhttp,或者okhttp是否依赖于不受安装提供程序影响的较低级别(或更高级别)的API?

  • 假设它确实有效,有什么好处?是否值得关注安全利益?它实际上是否会修复okhttp 2.2中与ALPN相关的本机崩溃,正如nfuller提示的那样

security ssl android google-play-services okhttp

12
推荐指数
1
解决办法
1667
查看次数

Android okHttp addFormDataPart动态为多个图像

您好AndroidUploaders,

我已经给出了回答使用OkHttp在multipart中上传一个大文件,但我坚持使用多个图像上传.

我想一次动态上传1到10张图片.

RequestBody requestBody = new MultipartBuilder()
                    .type(MultipartBuilder.FORM)
                    .addFormDataPart(KEY_PHOTO_CAPTION, photoCaption)
                    .addFormDataPart(KEY_FILE, "profile.png", RequestBody.create(MEDIA_TYPE_PNG, sourceFile))
                    .build();
Run Code Online (Sandbox Code Playgroud)

ArrayListPhotoCaption具有类captionPhotourlPhoto那么,如何可以addFormDataPart()

我想循环并调用这个函数多次ArrayList大小.

addFormDataPart()是否有动态使用的解决方案?

java android multipart image-uploading okhttp

12
推荐指数
2
解决办法
1万
查看次数

OkHTTPClient代理验证如何?

问题:如何向OkHTTP添加授权代理.

我知道OkHTTP的构建器确实支持代理,尽管我很难设置代理.

/**
 * Given a Url and a base64 encoded password return the contents of a website.
 * @param urlString
 * @param password
 * @return JSON
 */
public String getURLJson(String urlString, String password) {       
        OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(60, TimeUnit.SECONDS)
                .writeTimeout(60, TimeUnit.SECONDS)
                .readTimeout(60, TimeUnit.SECONDS)
                .build();

        Request request = new Request.Builder()
          .url(urlString)
          .get()
          .addHeader("authorization", "Basic " + password)
          .addHeader("cache-control", "no-cache")
          .build();

        Response response = null;
        try {
            response = client.newCall(request).execute();
            String string = response.body().string(); …
Run Code Online (Sandbox Code Playgroud)

java proxy okhttp okhttp3

12
推荐指数
1
解决办法
1万
查看次数

将cookie添加到客户端请求OkHttp

所以我开始使用Okhttp 3,网上的大多数例子都是关于旧版本的

我需要在OkHttp客户端请求中添加一个cookie,如何用OkHttp 3完成?

在我的情况下,我只是想静态地将它添加到客户端调用而不从服务器接收它

android okhttp okhttp3

12
推荐指数
3
解决办法
3万
查看次数

如何获取OkHttp3重定向的URL?

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

java networking android okhttp okhttp3

12
推荐指数
2
解决办法
6198
查看次数

使用OkHttp检查套接字是连接还是断开的更好方法?

我正在使用OkHttp通过Android上的套接字发送和接收消息.

创建套接字连接 -

SocketListener listener = new SocketListener();

mOkHttpClient = new OkHttpClient.Builder()
    .readTimeout(0, TimeUnit.MILLISECONDS)
    .build();
Request request = new Request.Builder()
    .url(socketURL)
    .build();
mOkHttpClient.newWebSocket(request, listener);
Run Code Online (Sandbox Code Playgroud)

这是用于侦听所有Web套接字事件的SocketListener类 -

public final class SocketListener extends WebSocketListener { 
    @Override
    public void onOpen(WebSocket webSocket, Response response) {
       // doing something
       isSocketConnected = true;
    }

    @Override
    public void onMessage(WebSocket webSocket, String text) {
       // doing something
    }

    @Override
    public void onMessage(WebSocket webSocket, ByteString bytes) {
    }

    @Override
    public void onClosing(WebSocket webSocket, int code, String reason) {
       // …
Run Code Online (Sandbox Code Playgroud)

sockets android okhttp okhttp3

12
推荐指数
1
解决办法
2451
查看次数

OkHttp不应用使用Annotations的Retrofit Interceptor的调用超时

我正在尝试使用OkHttp 3.12.0中最近添加的功能:全操作超时.为此,我还依赖于Invocation翻新2.5.0中的新类,它允许我检索方法注释.

注释是:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Timeout {

    int value();

    TimeUnit unit();

}
Run Code Online (Sandbox Code Playgroud)

改造界面是:

public interface AgentApi {

    @Timeout(value = 100, unit = TimeUnit.MILLISECONDS)
    @GET("something")
    Call<String> getSomething();

}
Run Code Online (Sandbox Code Playgroud)

拦截器是:

class TimeoutInterceptor implements Interceptor {

    @NonNull
    @Override
    public Response intercept(@NonNull Chain chain) throws IOException {
        Request request = chain.request();
        final Invocation tag = request.tag(Invocation.class);
        final Method method = tag != null ? tag.method() : null;
        final Timeout timeout = method != null ? method.getAnnotation(Timeout.class) : null;
        if (timeout …
Run Code Online (Sandbox Code Playgroud)

android retrofit okhttp retrofit2 okhttp3

12
推荐指数
1
解决办法
868
查看次数

OkHttp3永不超时互联网上的超时

首先,我已经阅读了很多关于我的问题的问题,但是它从来没有给我解决方案。以下是一些有关我的问题的阅读问题。

我也阅读了有关我的问题的这篇文章,但它也从未为我提供解决方案。

问题:

我在Web服务应用程序中使用Okhhtp3库。它工作正常,但是当互联网连接速度慢或连接不可靠时,它就卡住了,永远不会超时,也永远不会调用超时异常或失败方法。

这是客户端代码:

OkHttpClient client = new OkHttpClient.Builder()
            .connectTimeout(20, TimeUnit.SECONDS)
            .writeTimeout(20, TimeUnit.SECONDS)
            .readTimeout(20, TimeUnit.SECONDS)
            .retryOnConnectionFailure(false)
            .build();
Run Code Online (Sandbox Code Playgroud)

20秒后如何获得超时异常或称为故障方法?

请帮我。谢谢

java android connection-timeout okhttp okhttp3

12
推荐指数
1
解决办法
999
查看次数