使用 Picasso 在受保护的站点上下载 base64 图像

2023-12-08

我尝试用这个Android Picasso库,如何添加身份验证标头?访问返回该图像的 base64 版本的受保护图像。我的问题是毕加索总是失败。我不知道为什么。由于配置文件详细信息已加载,授权代码有效。只是图像不是。这是我的实现如何获取图像。

public class PicaAuth {


        private static Picasso sPicasso;

        private PicaAuth() {
        }

        public static Picasso getImageLoader(final Context context) {
            if (sPicasso == null) {
                Picasso.Builder builder = new Picasso.Builder(context);
                builder.downloader(new CustomOkHttpDownloader(context));
                sPicasso = builder.build();
            }
            return sPicasso;
        }

        private static class CustomOkHttpDownloader extends OkHttpDownloader {

            public CustomOkHttpDownloader(Context context) {
                super(context);
            }

            @Override
            protected HttpURLConnection openConnection(final Uri uri) throws IOException { 
                HttpURLConnection connection = super.openConnection(uri);
                connection.setRequestProperty("Authorization", Auth.getBearerAccessToken());
                return connection;
            }
        }
    }

主要活动

PicaAuth.getImageLoader(MainActivity.this)
                .load(uri)
                .into(mImage, new com.squareup.picasso.Callback() {
                    @Override
                    public void onSuccess() {
                        Log.d("Image Success");
                    }

                    @Override
                    public void onError() {
                        Log.e("Image Failed");
                    }
                });

你需要截取答案并更改它

OkHttpClient client;
OkHttpClient.Builder builderOkHttpClient;
builderOkHttpClient = new OkHttpClient.Builder();
        builderOkHttpClient.addInterceptor(new Interceptor() {
            @Override
            public Response intercept(Chain chain) throws IOException {
                Request newRequest = chain.request().newBuilder()
                        .build();
                Response response = chain.proceed(newRequest);
                try {
                    MediaType contentType = response.body().contentType();
                    String  base64String = response.body().string().getBytes("UTF-8");
                    base64String  = base64String .replace("data:image/jpeg;base64,", "");
                    byte[] decodedString = Base64.decode(base64String , Base64.DEFAULT);
                    ResponseBody body = ResponseBody.create(contentType, decodedString);
                    response = response.newBuilder().body(body).build();
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                return response;
            }
        });

 int cacheSize = 10 * 1024 * 1024;
        Cache cache = new Cache(context.getCacheDir(), cacheSize);
        builderOkHttpClient.cache(cache);
        client = builderOkHttpClient.build();
        Application.getAppComponent().inject(this);
        picasso = new Picasso.Builder(context)
                .downloader(new OkHttp3Downloader(client))
                .loggingEnabled(true)
                .indicatorsEnabled(true)
                .listener(new Picasso.Listener() {
                              @Override
                              public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) {
                                  Log.e("PICASSO", "loading image " + uri);
                                  Log.e("PICASSO ERROR", exception.getMessage());
                              }
                          }
                ).build();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Picasso 在受保护的站点上下载 base64 图像 的相关文章

随机推荐

  • 为 ggplot - R 安排数据帧格式

    我想将数据从宽格式重塑为长格式 以便我可以使用 ggplot 来创建图表 我在正确排列数据时遇到一些问题 到目前为止 我从 27 个数据帧的列表开始我的流程 仅向您展示前 10 个数据帧 gt str NDVI stat List of 2
  • SyntaxError:Object.parse(本机)npm 请求输入意外结束

    您好 我不明白为什么会出现此错误 我认为收到数据后就会执行回调 知道这是从哪里来的吗 多谢 节点错误 SyntaxError Unexpected end of input at Object parse native 我解析主体的答案 然
  • SQL 代理:设置最大执行时间

    下午 我在 MS 2K8 BI 服务器上运行多个 SQL 代理作业 其中一些每天运行一次 其他每小时运行一次 每两分钟运行一次 另一个进程的心跳监视器 还有一个应用程序可以全天候每隔几分钟导入一次数据 有时 更新和报告的某些组合会发生冲突
  • 使用 Facebook sdk 发布嵌入的 YouTube 链接

    当您有意在 FB 上分享 YouTube 链接时 它会自动将 YouTube 播放器嵌入到您的墙上 如下所示 但是 当我尝试使用发布相同的视频时FB sdk HelloFacebookSampleActivity gt postStatus
  • 如何从 C# winform 应用程序检索屏幕分辨率?

    如何检索我的 C Winform 应用程序运行时的屏幕分辨率 您是否只需要标准应用程序使用的区域 即排除 Windows 任务栏和停靠窗口 如果是这样 请使用Screen WorkingArea 属性 否则 使用屏幕边界 如果有多个显示器
  • 嵌入式 Facebook Like-Box 不允许我设计它。为什么?

    我正在尝试在我的网站页面上放置一个 Facebook Like Box 然后通过我自己的 CSS 对其进行样式设置 主要是为了增加 div stream content 的高度 这个想法是让 FB feed 充当新闻 feed 但我不希望用
  • Rails 卷曲语法

    我可以从我的 Rails 应用程序运行以下命令 Hash from xml x curl d admin true http localhost 8888 rescue nil 现在我想用变量替换 admin true 如果我有 x adm
  • 为什么数组大小为 1 [重复]

    这个问题在这里已经有答案了 可能的重复 C 编程语言中数组的大小 我正在尝试编写一个函数 如果数组中有值则返回 1 这是代码 int inArrayInt int iVal int iArray int i int arrayL sizeo
  • 使用 Python BeautifulSoup 查找页数

    我想从 Steam 页面中提取总页码 本例中为 11 我相信以下代码应该可以工作 返回 11 但它返回一个空列表 就像如果没有找到一样paged items paging pagelink class import requests imp
  • 在自定义 JsonConverter 中,如何确定 Utf8JsonReader 数字标记是小数还是长整型?

    我有这个json转换器需要将给定的属性值转换为小数或长整型 具体取决于该值 但我似乎无法确定属性值何时为小数或长整型 因为 tokentype 只能检测数字 我该如何解决这个问题吗 public override IDictionary
  • 设置捆绑包的自定义视图控制器?

    我有一个带有设置视图的应用程序 可以从远程服务器动态加载设置 运行良好 我还想在 iPhone 设置中提供这些功能 但设置包似乎仅限于加载并保存到本地 NSUserDefaults 的简单键值 有没有办法为此指定自定义视图 设置包基于 pl
  • NSAttributedString,整体更改字体但保留所有其他属性?

    假设我有一个NSMutableAttributedString 该字符串有多种多样的mix整个格式化 这是一个例子 这个字符串是hell to change in iOS it really sucks 然而 字体本身并不是您想要的字体 我
  • 在 PHP 中使用 comet?

    我正在考虑使用 PHP 后端实现实时聊天 但我在讨论 comet 的网站上看到了这样的评论 我的理解是 PHP 是 彗星的语言很糟糕 因为 Comet 要求你保留一个 对每个人开放的持久连接 浏览器客户端 使用 mod php 这个 意味着
  • 如何定义描述内存位置的宏? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 变量位于内存地址 0x10000 处 如何定义一个宏 以便写入该宏会写入该内存位置 在 C 中声明可写内存位置的事实上的标准方法是这样的 define REGISTER vola
  • 如何获取客户端程序的本地TCP端口和IP地址?

    我正在准备一个简单的工作项目 并尝试熟悉 Unix 开发环境中套接字编程的基础知识 此时 我已经有了一些基本的服务器端代码和客户端代码设置来进行通信 目前 我的客户端代码成功连接到服务器代码 服务器代码向其发送测试消息 然后两者都退出 完美
  • 从 Repository() 编译的源代码未放入分层 SCons 项目的变体目录中

    我有一个分层项目 它使用公共系统目录中的源代码 为此我使用 SConsRepository 函数并希望将所有构建输出 本地代码和从存储库中获取的代码 放置在variant dir中 如果我使用Repository 在简单场景中运行函数 非分
  • 为什么具有position:fixed的元素会与未定位的同级元素一起移动?

    关于S O 有很多问题 其中涵盖了如何解决此问题的答案 添加top 0 但他们都没有试图真正解释标题移动背后的原因 我更好奇为什么会出现这种情况
  • npm WARN ... 需要...的同级,但没有安装。您必须自己安装对等依赖项

    我尝试运行从下载的项目github 不幸的是 期间npm install显示以下警告 我尝试根据此更改版本question 但是 我遇到了一个问题 因为有些软件包需要多个版本 而其他软件包则需要多个版本 考虑这两行 npm WARN ang
  • 将 JavaRDD 转换为 DataFrame 时出现 Spark 错误:java.util.Arrays$ArrayList 不是 array 架构的有效外部类型

    我使用的是 Spark 2 1 0 对于以下代码 它读取文本文件并将内容转换为 DataFrame 然后输入到 Word2Vector 模型中 SparkSession spark SparkSession builder appName
  • 使用 Picasso 在受保护的站点上下载 base64 图像

    我尝试用这个Android Picasso库 如何添加身份验证标头 访问返回该图像的 base64 版本的受保护图像 我的问题是毕加索总是失败 我不知道为什么 由于配置文件详细信息已加载 授权代码有效 只是图像不是 这是我的实现如何获取图像