【问题标题】:Passing Parameter & Headers with Apache HttpDelete for Rest Web Service Android使用 Apache HttpDelete 为 Rest Web Service Android 传递参数和标头
【发布时间】:2013-05-02 11:11:39
【问题描述】:

我有一个HTTP DELETE 方法的终点。 我想传递一些标题,更具体地说是Content-Type=application/x-www-form-urlencoded。 还有一些参数,在服务器端将根据这些参数决定应该删除哪些记录。 我无法访问服务器实现。

我正在使用apache HTTP client。我的 HTTP DELETE 方法如下:

private String doDelete(String url, Map<String,String> params, Map<String,String> headerMap){

    HttpClient httpClient = new DefaultHttpClient(httpParams);
    HttpDelete httpDelete = new HttpDelete(httpRequestWrapper.getUrl());

    if(headerMap != null){
        for(String headerName : headerMap.keySet()){
            httpDelete.addHeader(headerName, headerMap.get(headerName));
        }
    }
    
    if(params != null){         
        for(String paramName : params.keySet()){
            httpParams.setParameter(paramName, params.get(paramName));
        }
        httpDelete.setParams(httpParams);
    }
    
    HttpResponse httpResponse = httpClient.execute(httpDelete);
    HttpEntity httpEntity = httpResponse.getEntity();
    String responseStr = getASCIIContentFromEntity(httpEntity);
    return responseStr; 
}

问题是,我看到(在调试模式下)参数在我端的删除请求中正确传递。但是在服务器端接收到的参数是空白的。有什么方法可以成功传递参数和标头?

感谢任何帮助。

【问题讨论】:

    标签: android web-services rest apache-httpclient-4.x http-delete


    【解决方案1】:

    逐字传递标题可能会导致问题。

    考虑到上述情况,请注意,在实施时,HttpDelete 方法不采用正文,因此与您的请求关联的特定 Content-Type 标头可能会导致干扰混淆容器。

    尝试从包含 Content-Type 的客户端中省略标头,看看是否能解决您的问题。

    编辑啊!!发现问题! setParams 方法令人困惑。根据 HTTP Client 4.x 的文档

    提供用于处理此消息的参数。

    您在代码中设置的参数将不会被传递,因为它们被传送到执行请求的底层客户端。

    This SO article 定义了适合您尝试的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-09
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 2015-01-24
      • 2013-01-31
      • 2012-04-14
      • 2012-03-12
      相关资源
      最近更新 更多