[英]how to solve 401 error
我试图从两个EditText视图发送JSON格式的数据(使用Volley),并且从我的Android应用程序向URL返回唯一的设备ID的方法,但我收到“ [8970] BasicNetwork.performRequest:HTTP的意外响应代码401 : //gorountsiallyetlasornall:5wxGq5UNlY6wdWmNAyYPVVrN@bulberadev.cloudant.com/notebook “
这是我的方法:
private void doPost() {
final String url = "https://gorountsiallyetlasornall:5wxGq5UNlY6wdWmNAyYPVVrN@bulberadev.cloudant.com/notebook";
final String deviceId = getDeviceId(getApplicationContext());
try {
try {
JSONObject jsonObject = new JSONObject();
String title = editTitle.getText().toString();
String content = editContent.getText().toString();
jsonObject.put("title", title);
jsonObject.put("content", content);
jsonObject.put("deviceId", "<" + deviceId + ">");
} catch (JSONException e) {
e.printStackTrace();
}
requestQueue = Volley.newRequestQueue(this);
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST,
url, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
VolleyLog.v("Response:%n %s", response.toString(4));
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// Log.e("VOLLEY", "ERROR");
}
});
requestQueue.add(jsonObjectRequest);
} catch (Exception e) {
e.printStackTrace();
}
}
它应采用以下格式:
{
"title":"Birth day",
"content":"Buy a gift for my mom!",
"deviceId":"<Device ID>"
}
401是未经授权的错误。
https://zh.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_Client_Error
这意味着无法识别用户和密码。 您是通过URL提供的,但这仅适用于浏览器。 如果您使用的服务接受基本HTTP授权标头,则此代码将为您提供所需的标头:
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> params = new HashMap<String, String>();
String creds = String.format("%s:%s","USERNAME","PASSWORD");
String auth = "Basic " + Base64.encodeToString(creds.getBytes(), Base64.DEFAULT);
params.put("Authorization", auth);
return params;
}
来自https://stackoverflow.com/a/18980454/3286819的原始代码
当然,用户名和密码必须是您自己的。 在这种情况下:
一些更多信息: https : //yakivmospan.wordpress.com/2014/04/04/volley-authorization/
错误401是未经授权的HTTP错误。 这不是Volley或android相关的错误。 在这种情况下,您提供的URL https:// gorountsiallyetlasornall:5wxGq5UNlY6wdWmNAyYPVVrN@bulberadev.cloudant.com/notebook
Volley也不能将其解释为登录名。 cURL和其他工具有时会使用此url将密码中的用户名硬编码到基本身份验证HTTP的URI中。
为此,您的用户名是gorountsiallyetlasornall,密码是5wxGq5UNlY6wdWmNAyYPVVrN。
根据基本认证,解释如下:https: //luckymarmot.com/paw/doc/HTTP_Basic_Auth需要将其转换为Base 64,然后添加到请求的标头中。
我已将您的用户名和密码转换为Basic Auth base 64编码的字符串,以供您使用。
Z29yb3VudHNpYWxseWV0bGFzb3JuYWxsOjV3eEdxNVVObFk2d2RXbU5BeVlQVlZyTg==
通过扩展Volley请求并覆盖函数getHeaders以返回具有以下键值对的HashMap,将其添加到Volley标头中。
"Authorization" , "Basic Z29yb3VudHNpYWxseWV0bGFzb3JuYWxsOjV3eEdxNVVObFk2d2RXbU5BeVlQVlZyTg"
您的请求现在可以使用。
如果您需要更详细的说明,请告诉我。
PS。 希望您在问题中发布的值不是您的真实用户名和密码。 如果是这样,那么将来就不要这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.