【发布时间】:2022-03-03 22:04:30
【问题描述】:
我正在尝试使用 Volley 库在 Android 应用程序中发出 GET 请求。此 GET 请求用于使用基本 HTTP 身份验证验证帐户凭据。我验证了带有凭据的 URL 在我的浏览器中有效,因为它返回了成功的 XML。格式为:
http://username:password@myanimelist.net/api/account/verify_credentials.xml
username 和 password 显然代表真实的用户凭据。 Volley 抛出此错误:
BasicNetwork.performRequest: Unexpected response code 401 for http://username:password@myanimelist.net/api/account/verify_credentials.xml
这是我处理请求的 Android 代码:
private static final String HTTP_PRE = "http://";
private static final String VERIFY_CREDENTIALS = "myanimelist.net/api/account/verify_credentials.xml";
public void verifyCredentials(String username, String password) {
RequestQueue queue = Volley.newRequestQueue(context);
String url = HTTP_PRE + username + ":" + password + "@" + VERIFY_CREDENTIALS;
StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
processResponse(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// handle error
Log.d(TAG, "error: " + error.getMessage());
}
});
queue.add(stringRequest);
}
这个覆盖 getHeaders() 方法的解决方案提供了相同的结果: How does one use Basic Authentication with Volley on Android?.
这是我对该解决方案的实现:
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = super.getHeaders();
if (params == null){
params = new HashMap<>();
}
String creds = String.format("%s:%s", username, password);
params.put("Authorization", creds);
return params;
}
在没有直接内置在 URL 中的凭据的情况下返回此错误:
BasicNetwork.performRequest: Unexpected response code 401 for http://myanimelist.net/api/account/verify_credentials.xml
如果有人可以提供建议,我将不胜感激。这是我第一次使用基本 HTTP 身份验证,所以我可能会遗漏一些明显的东西。
【问题讨论】:
标签: android get android-volley basic-authentication