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

Volley框架的更改重定向策略

单于正业
2023-03-14

我在一个项目中使用Volley框架,我总是需要自己处理重定向以处理标头。

如何处理重定向现在取决于方法和传输层。我希望使用默认的截取(自动选择传输层),而不更改任何截取代码。

一个有效的解决方案是始终使用OkHttp作为传输层(如Volley的问题和贡献中所述),但我想知道是否有一种方法不需要额外的框架。

因此,我正在寻找一种“干净”的方法来禁用自动重定向处理。

编辑:

我更喜欢使用OkHttp,这样我就不必自己管理在什么Android上使用什么版本,但是伊泰汉斯基提供的解决方案非常好,当想要改变传输层行为时。

共有3个答案

昌和悦
2023-03-14

此解决方案不需要其他框架:

Volley默认使用AndroidHTTPClient或Apache(如果SDK级别为8及以下)。您可以覆盖/继承这些类中重定向所需的更改,并使用它们创建自定义HttpStack,将其提供给Volley.newRequest estQueue()

假设很长的命名自定义HttpStack实现是您的:

HttpStack stack;
if (Build.VERSION.SDK_INT >= 9) {
    stack = new RedirectionHurlStack();
} else {
    stack = new RedirectionHttpClientStack();
}

sRequestQueue = Volley.newRequestQueue(context, stack);
满自明
2023-03-14

我认为使用OkHttp作为传输的Volley的HttpStack实现是最好的解决方案

RequestQueue queue = Volley.newRequestQueue(this);

Network network = new BasicNetwork(new OkHttpStack());
RequestQueue queue = new RequestQueue(new DiskBasedCache(new File(getCacheDir(), "volley")), network);
queue.start();

OkHttpStack类:

public class OkHttpStack extends HurlStack {
private final OkHttpClient client;

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

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

@Override protected HttpURLConnection createConnection(URL url) throws IOException {
return client.open(url);
}
}

更新:如果您使用的是新版本的okhttp堆栈,请使用

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);
    }
}
轩辕煌
2023-03-14

如果你不在乎旧的API(

RequestQueue requestQueue = Volley.newRequestQueue(context, new HurlStack() {
    @Override
    protected HttpURLConnection createConnection(URL url) throws IOException {
        HttpURLConnection connection = super.createConnection(url);
        connection.setInstanceFollowRedirects(false);

        return connection;
    }
});
 类似资料:
  • 我正在通过 django 表单向我的 Django Rest Framework API 提交一个 POST 请求。 下面是我的表单的一个片段: < code>views.py: 我正在进行一次成功的POST(项目是在数据库中创建的),但是一旦保存,我就会转到url,它显示了我的api w/Markdown。我想让它返回到特定的url。 有没有办法自定义成功后重定向到的位置? 添加序列化器:

  • 有一个设置,比如在www.xyz.com上运行一个应用程序,并且有一个报告使rest访问托管在www.abc.com上的应用程序。 由于IE8上CORS的奇怪问题,我们在www.xyz.com上进行rest访问,但实际上服务是在www.abc.com上托管的,所以在ngnix级别上,我们将rest请求从www.xyz.com重定向到www.abc.com。

  • 本文向大家介绍Android Volley框架全面解析,包括了Android Volley框架全面解析的使用技巧和注意事项,需要的朋友参考一下  Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据。Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpCl

  • 本文向大家介绍Android使用Volley框架定制PostUploadRequest上传文件,包括了Android使用Volley框架定制PostUploadRequest上传文件的使用技巧和注意事项,需要的朋友参考一下 发现问题 项目中有发表动态的功能,该功能可以将文本和图片上传至服务器。 Volley通过定制PostUploadRequest实现文件上传的功能,本文以一张图片上传为例。 数据

  • 问题内容: 如何在不重定向页面的情况下更改URL地址? 例如,当我单击下面的链接时: 我将从链接中获取URL: 如果我在下面这样做,页面将被重定向: 我想做一个类似此站点的操作,当您单击图像时,ajax调用将获取请求的页面,并且窗口上的URL地址也将被更改,因此它具有用于单击的路径。 问题答案: 注意:现在受支持-请参阅其他答案。 您 不能 更改整个URL而无需重定向,您可以做的是更改 hash

  • 本文向大家介绍Android Volley框架使用方法详解,包括了Android Volley框架使用方法详解的使用技巧和注意事项,需要的朋友参考一下 本文主要从两个方面对Android Volley框架的使用方法进行讲解,具体内容如下 一、网络请求 1.get方式请求数据    2.post方式请求数据    3.请求Json数据 二、图片加载 1.ImageRequest加载图片 2.Imag