[英]Post request working fine in cURL but not in Android Volley
當我在終端上運行此cURL命令時,它運行正常:
curl -X POST -H“內容類型:application / json” -H“授權:基本的uname:pass123” -d'{“ userName”:“ uname”,“ password”:“ pass123”}'“ http:/ /mysite123.com/api/Login “
現在,我正在嘗試使用Android Volley發送此帖子請求。 代碼如下:
RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
String url = "http://mysite123.com/api/Login";
StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Toast.makeText(MainActivity.this,response,Toast.LENGTH_LONG).show();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this,error.toString(),Toast.LENGTH_LONG).show();
error.printStackTrace();
}
}){
@Override
protected Map<String,String> getParams(){
Map<String,String> params = new HashMap<String, String>();
params.put("userName", "uname");
params.put("password", "pass123");
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String,String> headers=new HashMap<String,String>();
headers.put("Content-Type", "application/json");
headers.put("Accept", "application/json");
headers.put("Accept-Encoding", "utf-8");
String creds = String.format("%s:%s","uname","pass123");
String auth = "Basic " + Base64.encodeToString(creds.getBytes(), Base64.NO_WRAP);
headers.put("Authorization", auth );
return headers;
}
};
queue.add(stringRequest);
但這給我在stackTrace中的錯誤為:
09-03 07:46:43.823 17712-17918 / com.ankitshubham97.gpsmonitoring E / Volley:[108117] BasicNetwork.performRequest: http ://mysite123.com/api/Login 09-03 07:46的意外響應代碼400 :43.833 17712-17712 / com.ankitshubham97.gpsmonitoring E / Qmage:isQIO:流不是QIO文件09-03 07:46:43.843 17712-17712 / com.ankitshubham97.gpsmonitoring W / System.err:com.android。 volley.ServerError 09-03 07:46:43.853 17712-17712 / com.ankitshubham97.gpsmonitoring W / System.err:at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:163)09-03 07: 46:43.853 17712-17712 / com.ankitshubham97.gps監控W / System.err:at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112)
可能是什么問題呢? 或者直接從android發送curl命令的任何方法?
編輯:我什至使用https://incarnate.github.io/curl-to-php/將上面的cURL命令轉換為php代碼,並且php也可以正常運行。 我不知道排球怎么了!
使用郵遞員幫助了我。 因此,問題在於'{"userName":"uname","password":"pass123"}'
將作為原始格式以json格式發送到正文中(而不作為參數)。 因此,我使用了這種方法:
@Override
public byte[] getBody() throws AuthFailureError {
try {
return requestBody == null ? null : requestBody.getBytes("utf-8");
} catch (UnsupportedEncodingException uee) {
VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", requestBody, "utf-8");
return null;
}
}
@Override
public String getBodyContentType() {
return "application/json";
}
我之前將requestBody
定義為:
JSONObject jsonBody = new JSONObject();
try{
jsonBody.put("userName", "uname");
jsonBody.put("password", "pass123");
}
catch (JSONException e){
}
final String requestBody = jsonBody.toString();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.