Android 错误:MultipartEntity,客户端发送的请求在语法上不正确
Posted
技术标签:
【中文标题】Android 错误:MultipartEntity,客户端发送的请求在语法上不正确【英文标题】:Android error : MultipartEntity , request sent by the client was syntactically incorrect 【发布时间】:2012-07-24 10:34:53 【问题描述】:我想通过安全的 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 页面快照。
【问题讨论】:
您确定身份验证有效吗? 您可以在您的网络服务中发布您的映射 URL 吗?可能是您的 URL 请求与您映射的不同。 我检查了 URL 是否正确并在 HTML 页面中工作......但是 android 的代码给出了错误 您确定名称email
、musicData
等在小写/大写方面是正确的吗?
是的.....它是正确的,我仔细检查了它
【参考方案1】:
尝试在创建 HttpPost 对象时删除 setURI 方法并传入 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());
【讨论】:
只是接受它,因为赏金时间已经结束,我们有些接近解决方案,但问题仍然存在:(【参考方案2】:似乎请求的标头不正确,如果您使用服务器端无法处理的different Auth protocol 或upper/lower case 或简单的wrong things in header,则可能会出现此问题。
【讨论】:
【参考方案3】:不要通过尝试不同的组合来浪费您的时间。有一些 HTTP 请求工具可用于 HTTP,您可以使用这些工具跟踪您收到的请求和响应。例如。 HTTP Analyzer 下载试用版
从您的工作网络界面调用 URL,复制请求和响应 然后对程序执行相同的操作,该工具能够捕获您的请求和响应数据。
现在比较工作和不工作的请求,您肯定能够诊断问题,无论是标头问题还是某些与身份验证相关的问题。
【讨论】:
以上是关于Android 错误:MultipartEntity,客户端发送的请求在语法上不正确的主要内容,如果未能解决你的问题,请参考以下文章
Flutter Android Build Gradle错误配置根项目'android'?
Android Studio Android 资源链接失败错误.. AAPT:错误:找不到资源 android:attr/lStar。在 values.xml 105