【问题标题】:Why is My HttpPost request being broken up into two requests?为什么我的 HttpPost 请求被分成两个请求?
【发布时间】:2011-11-16 04:36:17
【问题描述】:

只是一些入门信息。我正在编写一个使用 MVC 平台与用 C#.Net 编写的服务器对话的 Andorid 应用程序。每个请求都是一个帖子,ActionFilter 属性确保了这一点。但是由于这个问题,.Net 将 HttpMethod 解析为“ST”。

以下是我在全局范围内用于从我的应用程序发出 Web 请求的代码:

private String MakeRequest(String action, String params){       
    try {
        HttpPost request = new HttpPost(mProtocol + mSubDomain + mHost + action);

        String args;
        if (params != null) {
            args = params;
        } else {
            args = "[]";
        }

        StringEntity requestEntity;
        requestEntity = new StringEntity(args);
        requestEntity.setContentType("application/json;charset=UTF-8");
        requestEntity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json;charset=UTF-8"));
        request.setEntity(requestEntity);   

    HttpResponse response = mHttpClient.execute(request);

        HttpEntity responseEntity = response.getEntity();

        String jString = EntityUtils.toString(responseEntity);

        return jString;

    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

我只有一种特定方法存在这个问题,所有其他方法都可以正常工作。

以下链接指向包含流量的 pcap 文件,因此它是清晰可见的。 (我已将其过滤到仅适用的行) http://dl.dropbox.com/u/315661/defect.pcap

【问题讨论】:

  • 另外值得一提的是,我已经看到它在 20-30 次尝试中运行一次。有一次它成功了,请求是一个数据包。

标签: java android asp.net-mvc http-post


【解决方案1】:

您是否尝试过在 POST 中禁用 100-Continue ?您通常不需要它,因为它只会增加您与服务器的通信的开销 - 如果服务(或您的设备和服务之间的任何工具包)可能会导致问题,例如代理等)您发布的内容不完全一致。

HttpProtocolParams.setUseExpectContinue(params, false)

【讨论】:

  • 您先生是救生员!非常感谢,我希望我能投票两次,我自己永远也想不通! :D
  • 在移动设备上默认启用这是一个非常可怕的功能,开发人员通常知道他在哪里发帖 - 我认为即使是 AndroidHttpClient 也会保留它默认开启。
  • 我读到我应该使用AndroidHttpClient,但我相信我遇到了很多问题,所以我只选择了DefaultHttpClient,它到目前为止工作得很好。 :D
  • AndroidHttpClient 带有一些您应该使用的基本设置 - 并且还可以防止您在 UI 线程上做愚蠢的 sh-t - 除了它非常“meh”。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-05
  • 2019-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
相关资源
最近更新 更多