关于xUtil3服务器图片验证码验证失败的问题。

本文介绍了一种解决xUtil3加载图片时默认禁用Cookie的问题,通过调整ImageOptions设置使得图片加载能正常使用Cookie,确保服务器端正确验证用户输入的验证码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前些日子我们项目需要图片验证码,图片是服务器端返回的,我就用xUtil3去加在图片,然后上传用户输入的验证码,服务器端验证一直不通过,检查发现是我这边xUtil3加载图片的时候默认把cookie给禁用了,所以服务器端无法根据cookie取得验证码的值和我上传的进行比较。我们可以看看xUtil3的bind方法。

/**
 * Created by wyouflf on 15/6/17.
 * 图片绑定接口
 */
public interface ImageManager {

    void bind(ImageView view, String url);

    void bind(ImageView view, String url, ImageOptions options);

    void bind(ImageView view, String url, Callback.CommonCallback<Drawable> callback);

    void bind(ImageView view, String url, ImageOptions options, Callback.CommonCallback<Drawable> callback);

    Callback.Cancelable loadDrawable(String url, ImageOptions options, Callback.CommonCallback<Drawable> callback);

    Callback.Cancelable loadFile(String url, ImageOptions options, Callback.CacheCallback<File> callback);

    void clearMemCache();

    void clearCacheFiles();
}
首先我们发现它的图片绑定是一个接口,接着我们就去找他的实现类
/**
 * Created by wyouflf on 15/10/9.
 */
public final class ImageManagerImpl implements ImageManager发现这个类实现了该接口,然后我们去找bind()方法
@Override
public void bind(final ImageView view, final String url) {
    x.task().autoPost(new Runnable() {
        @Override
        public void run() {
            ImageLoader.doBind(view, url, null, null);
        }
    });
}

@Override
public void bind(final ImageView view, final String url, final ImageOptions options) {
    x.task().autoPost(new Runnable() {
        @Override
        public void run() {
            ImageLoader.doBind(view, url, options, null);
        }
    });
}

@Override
public void bind(final ImageView view, final String url, final Callback.CommonCallback<Drawable> callback) {
    x.task().autoPost(new Runnable() {
        @Override
        public void run() {
            ImageLoader.doBind(view, url, null, callback);
        }
    });
}
最后他们都调用的doBind,我们在去看doBind方法
    // load from Network or DiskCache
    return new ImageLoader().doLoad(view, url, localOptions, callback);发现它有调用了doLoad方法,该方法中有个构建请求
参数的方法createRequestParams()我们发现他setUseCookie(false);
private static RequestParams createRequestParams(String url, ImageOptions options) {
    RequestParams params = new RequestParams(url);
    params.setCacheDirName(DISK_CACHE_DIR_NAME);
    params.setConnectTimeout(1000 * 8);
    params.setPriority(Priority.BG_LOW);
    params.setExecutor(EXECUTOR);
    params.setCancelFast(true);
    params.setUseCookie(false);
    if (options != null) {
        ImageOptions.ParamsBuilder paramsBuilder = options.getParamsBuilder();
        if (paramsBuilder != null) {
            params = paramsBuilder.buildParams(params, options);
        }
    }
    return params;
}
所以我们只需这样
final ImageOptions.ParamsBuilder builder = new ImageOptions.ParamsBuilder() {
@Override
public RequestParams buildParams(RequestParams params, ImageOptions options) {
params.setUseCookie(true);
return params;
}
};
ImageOptions options = new ImageOptions.Builder()
.setParamsBuilder(builder)
.build();
就能使用cookie了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值