当前位置: 首页 > 知识库问答 >
问题:

OkHttp静默重试中的可修改请求问题

赵雅懿
2023-03-14

在我的场景中,我们的后端希望对任何请求获得唯一的ID,但我读到“OKHTTP可能会在慢速/不可靠的连接上‘积极地’重复您的请求,直到成功。”和一些OkHttp问题。我知道可以使用RetryonConnectionFailure(false)禁用重试机制,但我希望启用它来处理连接问题。我想要的正是,在静默重试之前修改请求。我可以在发送沉默请求之前拦截吗?

共有1个答案

别峻
2023-03-14

我想你可以用拦截器解决这个过程。当服务器无法连接时,可以连接到另一个服务器。

@Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        // try the request
        Response response = doRequest(chain,request);
        int tryCount = 0;
        while (response == null && tryCount <= RetryCount) {
            String url = request.url().toString();
            url = switchServer(url);
            Request newRequest = request.newBuilder().url(url).build();
            tryCount++;
            // retry the request
            response = doRequest(chain,newRequest);
        }
        if(response == null){//important ,should throw an exception here
            throw new IOException();
        }
        return response;
    }
    
    private Response doRequest(Chain chain,Request request){
        Response response = null;
        try{
            response = chain.proceed(request);
        }catch (Exception e){
        }
        return response;
    }
 类似资料:
  • 我们对okhttp重试请求有一些问题。根据我们的崩溃报告日志,我们的大多数客户都收到了太多此类异常。 他们抱怨的是,数据上传到服务器,但移动端仍然显示没有上传。我研究了一点,发现okHttp在连接失败时重试请求,猜测这与这个主题有关。我不能在调试应用程序时创建一个案例。我已经尝试连接到10.10.10.1,它得到了套接字超时,但似乎okhttp没有重试这个请求。如果(!StreamAllocati

  • 一、修改请求 在上一步中,我们恢复了截获的请求,没有进行任何更改。当我们在将请求转发到目的地之前修改被拦截的请求时,就会发挥拦截的全部功能。您可以继续上一步中的窗口和已配置的拦截规则。 欢迎来到mitmproxy教程。在本课程中,我们将介绍对截获请求的修改。 点击查看教程 二、影片内容 欢迎来到mitmproxy教程。在本课程中,我们将介绍对截获请求的修改。 我们配置和使用与上一教程中相同的拦截规

  • 目前,我正在捕捉异常并重新尝试维护一个计数器变量。

  • 解决方案: 我为我的api请求准备了这段代码,当我使用调试器时,它可以工作。 我可以在PlayerStats课程中看到结果,但现在我遇到了一个问题。 但是在这个不工作: 统计数据。课程: 我需要一种从 不工作,因为零参数。 如果我试图修复: IDE说它需要一个或一个断言调用,但如果我尝试使用断言调用,应用程序就会崩溃,我会得到以下错误: 2020-03-05 18:58:02.803 23276-

  • 问题内容: 我正在使用节点/快速服务器。express的默认超时为120,000 ms,但这对我来说还不够。当我的响应达到120,000 ms时,控制台将记录日志,并且页面显示错误,因此我想将超时设置为更大的值。我该怎么办? 问题答案: 考虑到问题中的日志,我假设您正在使用。关键是在服务器上设置属性(以下将超时设置为一秒钟,使用您想要的任何值): 如果您不使用express,而仅使用普通节点,则原

  • 问题内容: 我在客户端使用Java-http-client库和Apache Transport,在服务器端使用Rails。有时会出现如下所示的获取错误: 我应该怎么做才能避免这种情况? 问题答案: 我有一个类似的错误,因为我使用了CountingInputStreamEntity这是一个不可重复的http客户端。解决方案是使用BufferedHttpEntity,它将不可重复的HTTP客户端转换为