[英]How to ensure that header request are sent when using Volley
我正在尝试使用Volley在我的Android应用程序中调用RESTful API。 该API要求用户使用公共密钥和将通过http标头发送的哈希进行身份验证。
当我尝试发送带有公钥和哈希的标头的POST请求时,我发现标头未由服务器附加/接收,并且出现Volley错误-BasicNetwork.performRequest:意外的响应代码400
这是我尝试使用JSON发送带有请求参数的标头请求的方法。
HashMap<String, String> params = new HashMap<String, String>();
params.put("email", email.getText().toString());
params.put("password", password.getText().toString());
pDialog = new ProgressDialog(LoginActivity.this);
pDialog.setMessage("Logging in...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
RequestQueue requestQueue = VolleySingleton.getInstance().getRequestQueue();
JsonObjectRequest request = new JsonObjectRequest(ApplicationConstants.url_sign_in, new JSONObject
(params), new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
Log.d(TAG, "onResponse") ;
error = response.getBoolean(TAG_ERROR);
message = response.getString(TAG_MESSAGE);
Toast.makeText(LoginActivity.this, message + " value of error", Toast.LENGTH_LONG).show();
pDialog.cancel();
} catch (JSONException e) {
e.printStackTrace();
}
Toast.makeText(LoginActivity.this, message, Toast.LENGTH_SHORT).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d(TAG,"onErrorResponse()") ;
pDialog.cancel();
NetworkResponse networkResponse = error.networkResponse;
if (networkResponse != null && networkResponse.statusCode == HttpStatus.SC_UNAUTHORIZED) {
// HTTP Status Code: 401 Unauthorized
Toast.makeText(LoginActivity.this, message, Toast.LENGTH_SHORT).show();
}
}
}){
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put(ApplicationConstants.publicKey, "Yahoo");
headers.put(ApplicationConstants.hash, "Google");
Log.d(TAG,"getHeaders()") ;
return headers;
}
};
requestQueue.add(request);
ApplicationConstants类
public interface ApplicationConstants {
//String ip = "10.0.3.2";
String ip = "192.168.100.2";
String publicKey = "pskPublicKey";
String hash = "pskPublicKey";
如果我仅使用请求参数尝试运行,但是当我尝试发送头请求时,它将无法发送头请求。
正如您在图片中看到的那样,我在邮递员中提供了公钥和哈希,我还从android的标头中发送了数据,但服务器中未接收到数据
400表示对服务器的错误请求。 标题可能是错误的。 您可以尝试添加Content-Type=application/json
标头,如下所示
header.put("Content-Type", "application/json");
如果这不起作用,则应在REST客户端中尝试该请求,并查看该请求是否适用于给定的标头。 在尝试中断Android之前,请确保该请求在其余客户端上正常运行。
覆盖您的getBodyContentType
方法
public String getBodyContentType()
{
return "application/json";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.