Webservice 无法在 Android Retrofit 中工作,但可以在 Postman 和 Swift / iOS 中工作,获取 401 Unauthorized

2023-11-26

“技术内容”之前的简报
对于使用 Retrofit 并不陌生,但遇到了这种奇怪的行为,我很难理解和修复它, 我有两个网络服务,在 Postman 和 iOS 中都按预期工作正常,但只有一个在 Retrofit 中工作,而另一个则不行,
在我的辩护中,我可以说我收到了(未经授权的)响应,这意味着我能够访问服务器并获得结果
在 API 开发人员的辩护中,他说它可以在 Postman 和其他设备上工作,所以不是服务问题

如果有任何改造专家告诉我改造可能在我背后做了什么才能得到这个错误?

技术资料
说到服务类型,它包含授权承载令牌作为标头,每 6 小时过期一次,并且根本不包含任何参数(所以它应该很简单,对吧?)和一个简单的 urlhttp://hashchuna.nn-assets.com/api/locations
不幸的是,标头令牌无法与有效密钥共享,因为它在任何人都可以尝试之前就已过期,但无论如何授权持有者 3d44626a55dbb024725984e0d37868336fd7e48a

我尝试过的
我正在使用 okhttp 拦截来添加授权标头以使用两者进行请求添加标题/标题方法,url 中没有空格,因为没有参数
改造时出现 401 未经授权的错误?
Java:Android:改造 - 使用 Call but,Response{code = 401,message=unauthorized}
https://github.com/square/retrofit/issues/1290
但他们都没有帮忙

WARNING
现在要记住的棘手部分是,令牌过期时必须给出 401 错误,这是预期的,但问题是即使对于新创建的令牌我也会得到 401 ,这是我的核心问题

LOG

D/OkHttp: --> GET http://hashchuna.nn-assets.com/api/locations http/1.1
D/OkHttp: Authorization: Bearer 7c0d53de006b6de931f7d8747b22442354cecef9
D/OkHttp: --> END GET
D/OkHttp: <-- 401 Unauthorized http://hashchuna.nn-assets.com/api/locations (773ms)
D/OkHttp: Date: Mon, 20 Feb 2017 10:44:11 GMT
D/OkHttp: Server: Apache
D/OkHttp: X-Powered-By: PHP/7.0.15
D/OkHttp: Access-Control-Allow-Origin: *
D/OkHttp: Access-Control-Allow-Credentials: true
D/OkHttp: Access-Control-Max-Age: 1000
D/OkHttp: Access-Control-Allow-Headers: X-Requested-With, Content-Type, Origin, Authorization, Accept, Client-Security-Token, Accept-Encoding
D/OkHttp: Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE, PUT
D/OkHttp: Expires: Thu, 19 Nov 1981 08:52:00 GMT
D/OkHttp: Cache-Control: no-store, no-cache, must-revalidate
D/OkHttp: Pragma: no-cache
D/OkHttp: Set-Cookie: PHPSESSID=u477o8g0q387t92hms4nhc14n1; path=/
D/OkHttp: Vary: Authorization
D/OkHttp: X-Powered-By: PleskLin
D/OkHttp: Keep-Alive: timeout=5
D/OkHttp: Connection: Keep-Alive
D/OkHttp: Transfer-Encoding: chunked
D/OkHttp: Content-Type: application/json;charset=utf-8
D/OkHttp: <-- END HTTP

CODE
截距

Request request = chain
                        .request()
                        .newBuilder()
                        //.header("Authorization","Bearer "+ SharedPrefsUtils.getSPinstance().getAccessToken(context))
                        .addHeader("Authorization","Bearer 1ed6b7c1839e02bbf7a1b4a8dbca84d23127c68e")
                        //.addHeader("cache-control", "no-cache")
                        //.cacheControl(CacheControl.FORCE_NETWORK)
                        .build();

改造实例

private Api getApiInstance(Context context) {
        HttpLoggingInterceptor logInter = new HttpLoggingInterceptor();
        logInter.setLevel(HttpLoggingInterceptor.Level.BODY);
        OkHttpClient mIntercepter = new OkHttpClient.Builder()
                .addInterceptor(new RequestResponseInterseptor(context))
                .addInterceptor(logInter)
                .build();

        Retrofit retrofitInstance = new Retrofit.Builder()
                //.addConverterFactory(new NullOnEmptyConverterFactory())
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl(BASE_URL)
                .client(mIntercepter)
                .build();
        return retrofitInstance.create(Api.class);
    }

解决方案(即 Cookie)
感谢一些提示,服务不兼容的实际原因是,据说是POSTMAN和iOS客户端存储和重用COOKIE当发出请求时不需要任何显式处理,Postman 中的 Cookie 可以通过以下方式进行测试:邮递员拦截器,但无法编辑,因为chrome不允许通过插件编辑cookie

然而,Retrofit/OkHttp 除非指定,否则将视为禁用(可能出于安全原因),
Cookie 要么添加到里面Interseptor作为标题之一addHeader("Cookie","KEY-VALUE")
or
Use cookieJar添加到

OkHttpClient mIntercepter = new OkHttpClient.Builder()
                .cookieJar(mCookieJar)
                .addInterceptor(new RequestResponseInterseptor(context))
                .addInterceptor(logInter)
                .build();

根据您的需要和 cookie 类型

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Webservice 无法在 Android Retrofit 中工作,但可以在 Postman 和 Swift / iOS 中工作,获取 401 Unauthorized 的相关文章

  • 使用捏合手势;如何放大用户手指实际“捏”的位置?

    我已经在我的应用程序中的 UIImageView 上实现了 UIPinchGestureRecognizer 但是无论我在图像的哪个位置捏合 它似乎都会放大到同一个位置 有谁知道我如何让它放大到用户实际 捏 的地方 请参阅下面的代码 视图控
  • 我可以使用 NSDateFormatter 将此日期字符串转换为 NSDate 吗?

    我有这个字符串 2010 08 24T16 00 00 05 00 我想从中提取时间部分 即 16 00 并将其转换为 12 小时等效值 即下午 04 00 我正在尝试使用 NSDateFormatter 来完成此任务 但它不起作用 NSD
  • 使用 RoboSpice 有没有办法从异常中获取 HTTP 错误代码?

    我正在编写一个使用 RoboSpice 的应用程序 在请求侦听器 onRequestFailure SpiceException arg0 中 有没有办法确定该错误是由于发生 401 HTTP 错误而导致的 我有一个后端服务 当令牌过期时
  • 构建应用程序时出现 BufferOverflowException

    每次我想运行我的 Android 应用程序时 我都会收到错误 2013 11 02 13 05 36 Dex Loader Unable to execute dex java nio BufferOverflowException Che
  • 相机叠加图片

    edit 3 好消息和坏消息 好消息是 在连接检查器中 通过断开覆盖 UIToolbar 并连接 UIImageview 我看到theKing 但是 坏消息 我没有看到我也需要的 UIToolbar 所以现在的问题是 当用户完成这里操作后
  • Android Studio APK META-INF/BCKEY.DSA 中复制的重复文件

    我的代码构建得很好 但是当我尝试在调试中运行它时 出现以下错误 Error Execution failed for task app transformResourcesWithMergeJavaResForDebug com andro
  • 检测设备方向

    我需要检测 Android 设备方向变化 而无需手动处理传感器数据 同时保持活动方向坚持某个方向 onConfigurationChange不会起作用 因为会让我的活动不旋转 通过使用传感器数据来检测方向变化 我认为这是轮子的发明 因为 A
  • 何时调用 glMatrixMode()

    我所关注的大多数 Android OpenGL ES 教程都有其 onSurfaceChanged 函数 如下所示 public void onSurfaceChanged GL10 gl int width int height gl g
  • 如何防止应用程序被盗(针对Android应用程序)?

    我想知道防止人们窃取我的应用程序的最有效方法是什么 在线下载 apk 的副本而不是购买它 我已经花了一个lot特别是 Droidbox 上的时间 并且不会发布 Sync 直到我可以保证提供专业版本的非法副本的人无法发布 有人实施过这个吗 我
  • Fresco:滚动 RecyclerView 后图像消失

    我有一个 Horizo ntal RecyclerView 每个项目都有一个使用 Facebook Fresco 图像库加载到其中的图像 然而 虽然正确的图像最初是在屏幕上滚动一点时加载的 但当 RecyclerView 进一步滚动时 它就
  • 带约束的 Swift 动画

    是否可以通过改变约束来制作 UIView 动画 基本上 我想要动画myv UIView 具有 x y 高度和宽度约束 使用 UIView animateWithDuration 1 5 通过改变旧的限制 是的 这是可能的 你可以这样做 fu
  • iOS:addConstraints:应用程序崩溃

    Problem 我似乎无法在现有项目中采用自动布局 Details 我之前也遇到过与此问题相同的问题presentViewController 在 iOS 但所提供的答案都不是我的解决方案 我正在使用所有没有 xib 的故事板视图 我的 使
  • 如何让surfaceview透明

    大家好 我想让我的 DrawingSurface 视图透明 我尝试了很多东西 但它不起作用 这是我的 xml 代码 使我的表面视图透明
  • 使用 twitter API 1.1 在 Android 应用程序中显示 twitter feed

    基本上我想展示这个提要 https en twitter com epl live https en twitter com epl live在我的应用程序中 由于 twitter 更改了其 api 1 1 每个调用都必须经过授权 我发现的
  • 如何获取Android中的所有主屏幕?

    我是安卓开发新手 我知道每个主屏幕都是启动器中的一个工作区 我想获取屏幕上所有应用程序图标的所有位置信息 那么有没有办法获取这些屏幕对象及其图标信息的列表 ADD 我更期待的是应用程序图标和屏幕之间的关系 例如 我想要某个应用程序图标的位置
  • 将 Facebook 图片 URL 上传到 Firebase 存储

    我正在尝试将用户的 Facebook 个人资料图片上传到 Firebase 存储 let dictionary result as NSDictionary let data dictionary objectForKey data let
  • JavaScript 点击事件在 Android 4.0.4 默认浏览器上的 Samsung Galaxy SIII 上不起作用

    我在 Android 4 0 4 上使用 Samsung Galaxy SIII 的默认浏览器时遇到了最奇怪的问题 对于以下页面 单击链接将不会触发 JavaScript 处理程序 从其中一个 div 的内容中删除单个 a 字母使它们再次工
  • 片段中的 SavedInstanceState 始终为 null

    我使用 XML 以及活动中的 setContentView 将片段附加到活动 A 有一个问题 因为我的片段中有非常动态的视图 所以当方向改变时 我必须恢复所有的观点状态 我有问题 因为我正在使用类似的东西 public void onSav
  • 更新查询时 ios 中出现“数据库锁定”错误

    我正在使用下面的代码更新查询 using sqlite 但我越来越 database is locked error 我尝试搜索一些 SO 链接 建议关闭数据库 但我再次执行此操作时遇到相同的错误 我已经提到过代码中出现错误的地方 cons
  • 如何从另一个活动更新 Recyclerview 数据

    我有两个活动 MainActivity 和 Addlogactivity 我正在更新 Addlogactivity 中的数据 该数据应显示在 mainactivity recyclerview 中 数据未在数据库中更新 MianActivi

随机推荐

  • 将字符串拆分为多个不同的字符

    我想使用一个或多个分隔符来分割字符串 例如 a b c 拆分为 和 将给出列表 a b c 目前 我在标准库中看不到任何东西可以做到这一点 而且我自己的尝试有点笨拙 例如 def my split string split chars if
  • Flutter SliverAppBar 与选项卡覆盖内容

    我已经遵循了这个教程 https medium com diegovoper flutter collapsing toolbar sliver app bar 14b858e87abe 创建带有 TabBar 的折叠工具栏 问题是 当我滚
  • 如何找到某个网站的JSON数据的链接

    我刚刚完成了一个关于如何开发一个 Android 应用程序的教程 该应用程序使用 JSON 数据从博客中检索更新的帖子 用于检索帖子的 JSON 数据的链接是以 api get recent summary 结尾的博客名称 如何找到不同网站
  • onchange 不适用于单选按钮

    我有一些单选按钮应该调用 hider something 当它们发生变化时 即当它们被选中或取消选中时 这是可行的 即 当选中时 它们会调用 JS 函数 但是 如果由于从该组中选择另一个单选按钮而未选中它们 则它不会再次调用 js 脚本 除
  • 为什么当我重新声明 Perl foreach 控制变量时没有收到警告?

    为什么重新声明没有发出警告 i在下面的代码中 usr bin perl use strict use warnings use Data Dumper for my i 1 3 my i DUMMY print Dumper i 实际上 您
  • 字符串到布尔值转换的最佳性能

    将字符串转换为布尔值时 以下哪个选项具有最佳性能 boolean value new Boolean true booleanValue boolean value Boolean valueOf true boolean value Bo
  • 在 Oracle 中找不到请求的 .Net Framework 数据提供程序

    string constr 数据源 DESCRIPTION ADDRESS PROTOCOL tcp HOST spp01 PORT 1521 CONNECT DATA SID Global 用户 ID SYSMAN 密码 testman3
  • 将两个 Uint32Array 值转换为 Javascript 数字

    我找到了一个代码here将 Javascript 数字转换为内部 IEEE 表示形式作为两个 Uint32 值 function DoubleToIEEE f var buf new ArrayBuffer 8 new Float64Arr
  • 收到“530 5.7.0 必须首先发出 STARTTLS 命令。”通过netcat发送邮件时出错

    我正在尝试使用 netcat 发送电子邮件 这就是我得到的 MacBook Pro nc smtp gmail com 25 220 mx google com ESMTP h8sm66301168eew 16 gsmtp Helo gma
  • 用jquery更改flash src?

    您好 我有一个显示一些链接的闪存菜单 但是当用户登录时 我想将菜单从 menu1 更改为 menu2 这样它将显示 我的帐户 而不是 注册 下面的代码适用于我的闪光灯 div div
  • 如何在android中以编程方式更改应用程序小部件中的图像

    我设计了一个 Android 应用程序小部件 其中有两个ImageView我想更改两个图像ImageView当单击图像以及调用方法时 现在我用RemoteView像这样 RemoteViews views1 new RemoteViews
  • 为什么 Activity 中的 onCreate() 受到保护?

    为什么Activity中的onCreate 受到保护 或者我应该问 为什么它有效 受保护的方法只能在类本身或其后代的内部调用 所以Android系统不能像 act onCreate 那样调用它 那么 怎么称呼呢 顺便说一句 为什么 OnCl
  • xgboost 多类工作中的 base_score 有什么用?

    我正在尝试探索 Xgboost 二元分类以及多类的工作原理 在二进制类的情况下 我观 察到基本分数被认为是起始概率 并且在计算时也显示出重大影响Gain and Cover 在多类别的情况下 我无法弄清楚的重要性基本分数参数 因为它向我显示
  • 如何使用 SVN 日志检测修改的属性

    背景 编写一个自动发布脚本 从SVN导出版本之间更改的文件并上传到远程服务器 svn log 命令显示修改的文件and属性 但似乎没有区分内容修改和属性修改之间的详细输出 我是否错误地读取了此输出 或者是否有一种简单的方法可以获取修订之间已
  • 从网站打开资源管理器窗口

    我的公司有一个用于项目的共享网络文件夹 该文件夹包含我们每个客户的子文件夹 每个子文件夹包含为这些客户完成的项目的所有信息 有道理 是吗 OK 我收到了一项任务 当在我们公司的 MS CRM 中查看客户帐户时 允许用户单击一个按钮 打开资源
  • Try/Catch 内部或外部函数

    我有一个关于使用最佳实践的非常基本的问题try catch 我有一个像这样的简单函数 DAO public void addVehicle Vehicle vehicle em getTransaction begin em persist
  • 如何让 Spring Security 接受 JSON 而不是表单参数?

    我正在尝试更改 JHipster 以便它使用 JSON 对象而不是表单参数进行身份验证 我已经设法使其适用于 JWT 身份验证机制 现在我想为其他身份验证选项执行此操作 有没有一种简单的方法可以更改 Spring Security 的默认安
  • void main() { if(sizeof(int) > -1) printf("true"); }否则 printf("假"); ; [复制]

    这个问题在这里已经有答案了 void main if sizeof int gt 1 printf true else printf false 我期望输出为真 但结果是假的 谁能解释一下输出的原因 sizeof int 属于类型size
  • 检查点是否在圆内

    我有一个以纬度 经度表示的点 Position louvreMuseum new Position 48 861622 2 337474 我有一个以米表示的半径值 我需要检查另一个点 也以纬度 经度表示 是否在圆内 如果我在平坦的表面上 我
  • Webservice 无法在 Android Retrofit 中工作,但可以在 Postman 和 Swift / iOS 中工作,获取 401 Unauthorized

    技术内容 之前的简报对于使用 Retrofit 并不陌生 但遇到了这种奇怪的行为 我很难理解和修复它 我有两个网络服务 在 Postman 和 iOS 中都按预期工作正常 但只有一个在 Retrofit 中工作 而另一个则不行 在我的辩护中