公司项目需要接入香港天文台的天气xml,API是http://xml.weather.gov.hk/V2/
需要账号密码,机场那边提供过来之后,发现app内请求会报401,Authorization Required错误。
话不多说,直接上代码:
OkHttpClient.Builder client = new OkHttpClient.Builder(); client.authenticator(new Authenticator() { @Override public Request authenticate(Route route, okhttp3.Response response) throws IOException { if (responseCount(response) >= 3) { return null; } String credential = Credentials.basic("userName", "passWord"); return response.request().newBuilder().header("Authorization", credential).build(); } });
Request request = new Request.Builder().get().url(url).build();client.build().newCall(request).enqueue(new okhttp3.Callback() { @Override public void onFailure(okhttp3.Call call, IOException e) { } @Override public void onResponse(okhttp3.Call call, okhttp3.Response response) { if (response.isSuccessful()) // LogUtils.error(TAG, "Successful"); } });
private int responseCount(okhttp3.Response response) { int result = 1; while ((response = response.priorResponse()) != null) { result++; } return result; }
参考资料:
https://square.github.io/okhttp/2.x/okhttp/com/squareup/okhttp/Authenticator.html