12

我想通过安全的宁静网络服务发送歌曲(mp3/wav)文件和一些数据。我正在使用 MultipartEntity 发出 HttpPost 请求。但是当我通过 HttpClient 执行它时,服务器会回复此错误

HTTP 状态 400 - 错误请求类型:状态报告消息:错误请求 客户端发送的请求在语法上不正确(错误请求)。

但是,如果我们从它的 Web 界面调用它,该服务就做得很好。请帮忙

它的代码

HttpClient httpclient = new DefaultHttpClient();
HttpPost postRequest = new HttpPost();
        try {
            MultipartEntity reqEntity = new MultipartEntity();

            reqEntity.addPart("email", new StringBody("test@testmail.com"));
            reqEntity.addPart("password", new StringBody("123"));
            reqEntity.addPart("title", new StringBody("My new song"));
            reqEntity.addPart("musicData", new FileBody(new File(FilePath))); 

            // FIlePath is path to file and contains correct file location

            postRequest.setEntity(reqEntity);

            postRequest.setURI(new URI(ServiceURL));
            HttpResponse response = httpclient.execute(postRequest);

        } catch (URISyntaxException e) {
            Log.e("URISyntaxException", e.toString());
        } 

我还为 MultipartEntity 添加了 apache-mime4j、httpclient、httpcore 和 httpmime jar。

这是服务的 HTML 页面快照。 在此处输入图像描述

4

3 回答 3

5

尝试在创建 HttpPost 对象时删除 setURI 方法并传入 URL,如下所示。这对我有用(更多here)。

HttpClient httpclient = new DefaultHttpClient();
HttpPost postRequest = new HttpPost(ServiceURL);
try {
    MultipartEntity reqEntity = new MultipartEntity();

    reqEntity.addPart("email", new StringBody("test@testmail.com"));
    reqEntity.addPart("password", new StringBody("123"));
    reqEntity.addPart("title", new StringBody("My new song"));
    reqEntity.addPart("musicData", new FileBody(new File(FilePath)));     
    postRequest.setEntity(reqEntity);

    HttpResponse response = httpclient.execute(postRequest);

} catch (URISyntaxException e) {
    Log.e("URISyntaxException", e.toString());
} 
于 2012-08-01T04:20:31.507 回答
3

请求的标头似乎不正确,如果您使用不同的 Auth 协议大写/小写或服务器端无法处理的标头中的错误内容,则可能会出现此问题。

于 2012-07-30T05:47:28.903 回答
2

不要通过尝试不同的组合来浪费您的时间。有一些 HTTP 请求工具可用于 HTTP,您可以使用这些工具跟踪您获得的请求和响应。例如。HTTP Analyzer 下载试用版

从您的工作网络界面调用 URL,复制请求和响应,然后从程序中执行相同操作,该工具能够捕获您的请求和响应数据。

现在比较工作请求和非工作请求,您肯定能够诊断问题,无论它可能是标头问题还是某些与身份验证相关的问题。

于 2012-08-02T07:09:57.013 回答