HTTP POST方法返回状态代码404

时间:2014-01-24 11:54:00

标签: java android http-post

当我通过以下方法执行API时,我总是得到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;
}

我不知道我哪里错了。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:5)

来自wiki的

  

404或Not Found错误消息是HTTP标准响应代码   表明客户端能够与服务器通信,   但是服务器找不到请求的内容。

所以,您的代码没问题,但是服务器找不到您要查找的资源。仔细检查您的网址是否正确。


如何通过fiddler代理传递请求以进行调试:

  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) 

答案 1 :(得分:0)

我收到404的POST请求,因为未启用Apache 2服务器的mod_headers模块。如果发生这种情况,您可以通过以下方式启用它:

sudo a2enmod headers

然后重新启动apache:

sudo service apache2 restart