簡體   English   中英

發布請求可以在cURL中正常工作,但不能在Android Volley中正常工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM