【问题标题】:Android HttpClient DELETE method with request body带有请求正文的 Android HttpClient DELETE 方法
【发布时间】:2014-01-13 12:48:09
【问题描述】:

我正在尝试使用 HttpClient DELETE 方法从列表中删除项目。我想使用请求正文发送相关的 item_id。我正在使用以下方式发送数据。

 DefaultHttpClient httpclient = new DefaultHttpClient();
                httpclient = HttpUtils.getNewHttpClient();
                HttpDelete httpPostRequest = new HttpDelete(URL);     

                **httpPostRequest.setHeader("item_id",id);**
                httpPostRequest.addHeader("Authorization", getB64Auth(username,password));
                httpPostRequest.setHeader("Accept", "application/json");
                httpPostRequest.setHeader("Content-type", "application/json");
                httpPostRequest.setHeader("Accept-Encoding", "gzip"); 

但我无法将该项目删除到服务器数据库中。如何在 HttpDelete 中使用请求正文?

【问题讨论】:

  • 为什么将 Id 设置为请求的标头?你的Json 对象在哪里?为什么你不用json发送id?

标签: android


【解决方案1】:

根据 HTTP/1.1 规范,除了 POST 和 PUT 之外,您不能发送实体主体。

使用请求参数或标头属性。你可以使用URI Builder:

URI myURI = android.net.Uri.Builder.path(myPathString).query("item_id=1").build();

【讨论】:

  • Builder(myPathString) 未定义
  • 很抱歉成为一个书呆子,但 HTTP/1.1 规范仅明确禁止在 TRACE 请求中使用正文实体。授予 DELETE 方法状态,“DELETE 方法请求源服务器删除由 Request-URI 标识的资源。”,但其他一切都可以有一个主体实体。
  • @user2791100 你是对的,解决了这个问题。但是,您需要查看 API 以选择正确的方法,具体取决于您的输入(可能是完整的 URL、路径、编码/未编码...)
  • @marcus.ramsden 你是对的,新版本的规范明确允许在 DELETE 上使用 body-entity。但是,应该注意的是,一些服务器和框架(可能大部分是旧版本)倾向于不喜欢/忽略 DELETE 请求的主体实体。
【解决方案2】:

根据here 的答案,应该会给您一个带有实体字段的 DELETE 请求。一旦您提出了自己的请求类型,您就可以这样做;

List<NameValuePair> deleteParams = new ArrayList<>();
deleteParams.add(new BasicNameValuePair("item_id", id));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(deleteParams);

HttpDeleteWithBody deleteRequest = new HttpDeleteWithBody(URL);
deleteRequest.addHeader("Authorization", getB64Auth(username,password));
deleteRequest.setHeader("Accept", "application/json");
deleteRequest.setHeader("Content-type", "application/json");
deleteRequest.setHeader("Accept-Encoding", "gzip"); 
deleteRequest.setEntity(entity);

【讨论】:

  • 如何获取 HttpDeleteWithBody 类?
  • 看看我链接的问题,您需要按照接受的答案中的描述创建类。
猜你喜欢
  • 2018-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多