【问题标题】:XMLHttpRequest fails basic authenticationXMLHttpRequest 未通过基本身份验证
【发布时间】:2014-08-04 16:05:49
【问题描述】:

知道为什么XMLHttpRequestPebble JS Framework 中使用正确的凭据在Android 上无法通过基本身份验证,但在iOS 上可以使用吗?

完全相同的代码,大致如下:

var req = new XMLHttpRequest();
req.open(method, url, true, user, pass);
req.send(data);
req.onreadystatechange = function() { ... }

从 Android Pebble 应用返回 401,但在 iOS 中正确验证。

【问题讨论】:

  • 反对者团结起来 :) 或者至少“解释一下自己”。是“你试过什么”吗?还是“展示你的努力/代码”?我很乐意听。
  • @JakeGould 不幸的是它不适用于我。 Pebble 应用程序的 JS 部分已经在 iOS 上正常工作。并且在 Android Pebble JS 框架中总是失败 - 即使使用正确的凭据
  • @JakeGould 此代码不在 WebView 内部运行,我认为它也不适用。

标签: ajax xmlhttprequest pebble-watch pebble-sdk


【解决方案1】:

我找到了适用于 Android 的解决方法。

不知道为什么,直接认证请求:

    req.open(method, fullurl, true, user, pass);
    req.send(data);

对我不起作用——它总是返回 401。所以我尝试通过标头设置基本身份验证:

    req.open(method, fullurl, true);
    req.setRequestHeader("Authorization", "Basic " + Base64.encode(user + ":" + pass)); 
    req.send(data);

(Base64 取自这里:https://stackoverflow.com/a/246813/961695)——它成功了!可能 Android 上的 XmlHttpRequest 实现存在 bug。

【讨论】:

  • 为什么不试试 btoa?是纯javascript.. ¬.¬ 试试req.setRequestHeader("Authorization", "Basic " + btoa(user + ":" + pass));
  • btoa 仅是 ASCII 码
猜你喜欢
  • 2010-11-24
  • 1970-01-01
  • 2017-09-18
  • 1970-01-01
  • 2010-12-11
  • 1970-01-01
  • 1970-01-01
  • 2015-05-13
  • 1970-01-01
相关资源
最近更新 更多