我想通过安全的restful web服务发送歌曲(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页面快照。
答案 0 :(得分:5)
尝试删除setURI方法并在创建HttpPost对象时传入URL,如下所示。这对我有用(more 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());
}
答案 1 :(得分:3)
请求的标头似乎不正确,如果您使用服务器端无法处理的different Auth protocol或upper/lower case或简称wrong things in header,则会出现此问题。
答案 2 :(得分:2)
不要通过尝试不同的组合来浪费你的时间。有一些HTTP请求工具可用于HTTP,您可以使用它来跟踪您获得的请求和响应。 HTTP Analyzer下载试用版
从您的工作网络界面调用URL,复制请求和响应 然后从程序中执行相同操作,该工具能够捕获您的请求和响应数据。
现在比较工作和非工作请求,您肯定能够确定问题是否可能是标题问题或某些与身份验证相关的问题。