2014-01-24 139 views
1

当我通过下面的方法执行一个API时,我总是得到404作为响应代码。HTTP POST方法返回状态码404

private void execute() throws IllegalStateException, IOException, NoSuchAlgorithmException { 

    Map<String, String> comment = new HashMap<String, String>(); 
    comment.put("accounts-groups", "customers/enterprise"); 
    comment.put("companyType", "customer"); 
    comment.put("companyName", "Test"); 
    String json = new GsonBuilder().create().toJson(comment, Map.class); 
    Log.i(TAG, "json : "+json); 

    HttpResponse response = makeRequest(URL, json); 

    /*Checking response */ 
    if(response != null) { 
     InputStream inputStream = response.getEntity().getContent(); //Get the data in the entity 
     int statusCode = response.getStatusLine().getStatusCode(); 
     Log.i(TAG, "statusCode : "+statusCode); 
     String result; 
     // convert inputstream to string 
     if(inputStream != null) 
      result = convertStreamToString(inputStream); 
     else 
      result = "Did not work!"; 

     Log.i(TAG, "result : "+result); 
    } 
} 

private HttpResponse makeRequest(String uri, String json) throws NoSuchAlgorithmException { 
    Log.i(TAG, "uri : "+uri); 
    try { 
     HttpPost httpPost = new HttpPost(uri); 
     httpPost.setEntity(new StringEntity(json, HTTP.UTF_8)); 

     long timestamp = System.currentTimeMillis(); 

     String signatureKey = PRIVATE_KEY + timestamp; 

     byte[] bytesOfMessage = signatureKey.getBytes(HTTP.UTF_8); 

     MessageDigest md = MessageDigest.getInstance("MD5"); 
     byte[] thedigest = md.digest(bytesOfMessage); 
     char[] signature = Hex.encodeHex(thedigest); 

     String finalSignature = String.valueOf(signature); 

     Log.i(TAG, "finalSignature : "+finalSignature); 

     httpPost.setHeader("Timestamp", ""+timestamp); 
     httpPost.setHeader("Api_token", API_TOKEN); 
     httpPost.setHeader("Signature" , finalSignature); 

     httpPost.setHeader("Accept", "application/json"); 
     httpPost.setHeader(HTTP.CONTENT_TYPE, "application/json");   

     return new DefaultHttpClient().execute(httpPost); 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

我不明白我错了什么地方。任何人都可以帮助我吗?

回答

3

从维基:

404或Not Found错误消息是指示客户端能够与服务器, 通信,但服务器找不到请求什么是HTTP标准响应代码 。

所以,你的代码是好的,但服务器找不到你正在寻找的资源。仔细检查您的网址是否正确。


如何通过提琴手代理传递请求调试目的:

HttpParams params = new BasicHttpParams(); 

    // .... 

    HttpHost proxy = new HttpHost("192.168.1.12", 8888); // IP to your PC with fiddler proxy 
    params.setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy); 

    // use params as a second parameter to: following constructor: 
    // public DefaultHttpClient (ClientConnectionManager conman, HttpParams params) 
+0

网址是正确的。他们在顶点代码中使用的相同url并且工作正常。不知道java代码中有什么问题。 – Braj

+0

我会在窗口上使用fiddler来调试这个请求,这将显示服务器的确切内容,以及返回的内容 - 这也允许保存此类请求并在桌面上进行测试。 – marcinj

+0

HTTPHost的第一个参数是我的系统IP地址,可以告诉我什么是“params”n如何获取它?我在ubuntu上 – Braj