1

I'm using HttpURLConnection class to manage HTTP connections in my Android app. Problem is, on some servers, I have a code 401 using an URL which working on a Internet navigator. I initialize connection with basic authentication, but I think these servers need an other mode. I know it works with libCURL and the following instruction:

curl_easy_setopt(pCurlHandle, CURLOPT_HTTPAUTH, CURLAUTH_ANY);

But is there an way to doing something like that on Android? Currently, I do that:

...
connection.setRequestProperty("Authorization", "Basic " +  Base64.encode("username:password"));
...

I tried with Authenticator too:

Authenticator.setDefault(new Authenticator() {

    @Override
    protected PasswordAuthentication getPasswordAuthentication()
    {
        return new PasswordAuthentication("username", "password".toCharArray());
    }
});

But I still have a 401 in my app. Any idea?

N0un
  • 868
  • 8
  • 31

1 Answers1

1

Well, this post really helped me (but I don't use Authenticator class at all) and now my code do the job like that (if authentication is needed):

  • Initialize my HttpURLConnection object with Basic authentication (see the first Java sample in my question's code)

  • Test if I receive a code 401 and if it is, check if server was excepted for a Digest authentication analyzing response headers.

  • Retry with a manually-built Digest request property (see the post I mentioned)

  • And it works!

I hope this answer'll help someone!

Community
  • 1
  • 1
N0un
  • 868
  • 8
  • 31