Filedownloader: 对于有密码的连接, 如何添加一个authenticator

Created on 26 May 2016  ·  9Comments  ·  Source: lingochamp/FileDownloader

在Application中初始化FileDownloader,然后我在验证密码后,这样设置FileDownloader,可是不成功,依然在控制台看到401错误,求大神打救!

FileDownloadHelper.OkHttpClientCustomMaker maker = new FileDownloadHelper.OkHttpClientCustomMaker() {
                        @Override
                        public OkHttpClient customMake() {
                            final OkHttpClient.Builder builder = new OkHttpClient.Builder();
                            builder.authenticator(new Authenticator() {
                                @Override
                                public Request authenticate(Route route, Response response) throws IOException {
                                    String credential = Credentials.basic(clientInfo.getUserName(), clientInfo.getPassword());
                                    return response.request().newBuilder().header("Authorization", credential).build();
                                }
                            });
                            return builder.build();
                        }
                    };

                    FileDownloadHelper.setOkHttpClient(maker.customMake());
question

All 9 comments

不能这样设置的。这样设置没有作用。因为FileDownloadHelper中的OkHttpClient在完成初始化以后就不再使用,你可以有以下方法可以带上对应头:

  1. FileDownloader.init 的时候带上 OkHttpClientCustomMaker,在这里自定义okhttpClient。
  2. 对于某个特定的BaseDownloadTask,通过 BaseDownloadTask#addHeader 的方法进行添加。

对于第一种方法,FileDownloader.init是必须要在Application类里面初始化的是吧?如果这样的话,APP刚运行的时候还没开始验证username和password,就没法把username和password带
进自定义okhttpClient了。

对于第二种方法,我还是不太懂怎么把username和password作为参数传进去,例如username = "my_name" , password = "my_password", addHeader(String, String)这个方法是怎么使用的呢?

找到了

String credential = Credentials.basic(info.getUserName(), info.getPassword());
        downloadTask.addHeader("Authorization", credential);

谢谢你的回复!

Hi, 我遇到了一个新的问题,我希望下载的时候无论如何都重新下载一遍,即使是文件保存路径下载url都一样的情况下,我试了baseDownloadTask.setForceReDownload(true),但是貌似没有作用,还是回调到了void warn(BaseDownloadTask task)这个回调,文件没有重新被下载,我该怎样实现这个目的?

查看了#142这个issue, 发现情况是一样的,简单看了一下源码,可能是下载完成之后内部runnning列表里面没删除任务或者是列表没同步导致的?我切换回旧的版本 0.2.0 , 不会出现该问题。

warn 是因为已经有了相同的 Path 与Url 正在下载过程中, 因为对于这样的任务出现大于1个是没有意义的,简单的理解就是 对同一个文件持有两个句柄进行写入同一个文件,这个是不允许的。

setForceReDownload(true) 作用是:如果这个文件已经下载过了,并且已经下载完成了。这时候不会直接返回完成,会重头开始下载。

我理解你说的意思,但是我的文件已经下载完成了的,complete()回调已经调用而且在本地能看到完整文件,这时候再重新下载,会出现上述情况,FileDownloader会认为task仍在下载,所以抛 warn

@244317809 多谢你的issue,我单独提一个issue跟这个bug吧。

@244317809 #169

Was this page helpful?
0 / 5 - 0 ratings

Related issues

bluemix picture bluemix  ·  4Comments

itsmallsun picture itsmallsun  ·  5Comments

genkido picture genkido  ·  5Comments

mzpbvsig picture mzpbvsig  ·  6Comments

seransaca picture seransaca  ·  5Comments