我在一个项目中使用Volley框架,我总是需要自己处理重定向以处理标头。
如何处理重定向现在取决于方法和传输层。我希望使用默认的截取(自动选择传输层),而不更改任何截取代码。
一个有效的解决方案是始终使用OkHttp作为传输层(如Volley的问题和贡献中所述),但我想知道是否有一种方法不需要额外的框架。
因此,我正在寻找一种“干净”的方法来禁用自动重定向处理。
编辑:
我更喜欢使用OkHttp,这样我就不必自己管理在什么Android上使用什么版本,但是伊泰汉斯基提供的解决方案非常好,当想要改变传输层行为时。
此解决方案不需要其他框架:
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);
我认为使用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);
}
}
如果你不在乎旧的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