Search code examples
ajaxxmlhttprequestpebble-watchpebble-sdk

XMLHttpRequest fails basic authentication


Any idea why XMLHttpRequest with correct credentials in Pebble JS Framework fails basic authentication on Android but works in iOS?

Exactly the same code, along the lines of:

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

Returns 401 in from Android Pebble app, but authenticates correctly in iOS.


Solution

  • I found a workaround that worked for me on Android.

    Don’t know why but direct authenticated request:

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

    didn’t work for me – it always returned 401. So Instead I tried to set basic authentication via header:

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

    (where Base64 is taken from here: https://stackoverflow.com/a/246813/961695) – and it worked! Perhaps there’s a bug in XmlHttpRequest implementation on android.