2017-09-03 32 views
0

工作在卷曲很好,当我在我的终端上运行此命令卷曲工作正常:发布采购信息,但不是在Android的凌空

卷曲-X POST -H“内容类型:应用程序/ JSON” - H “授权: 基本UNAME:pass123” -d '{ “username” 的: “UNAME”, “密码”: “pass123”}' “http://mysite123.com/api/Login

现在,我想使用Android排球发送此帖子请求。代码如下:

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); 

但它给我的错误堆栈跟踪为:

七月九日至3日:46:43.823 17712-17918/com.ankitshubham97.gpsmonitoring E /排球: 108117] BasicNetwork.performRequest:对于http://mysite123.com/api/Login 09-03 07:46:43.833 17712-17712/com.ankitshubham97.gpsmonitoring意外的响应代码400 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.gpsmo nitoring W/System.err:at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:163) 09-03 07:46:43.853 17712-17712/com.ankitshubham97.gpsmonitoring W/System.err:在com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112)

可能是什么问题呢?或者任何直接从android发送curl命令的方法?

编辑:我甚至用https://incarnate.github.io/curl-to-php/转换上述cURL命令为php代码和PHP运行良好。我想知道Volley有什么问题!

+0

我想你的curl命令,但其赋予相同的响应405不允许的方法 - DOSarrest互联网安全 –

+0

也就是说因为我在这里给出了错误的网址,用户名和密码,而不是真正的网址。 –

回答

0

使用邮差帮助了我。所以,问题是'{"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();