0

我正在尝试将一些 XML 放入服务器,但其要点是无论我做什么,HttpPut 都不会在 Http 正文中放入任何内容。服务器总是回来说尸体不见了,通过Wireshark查看,什么都没有!这是我用来设置和运行请求的代码:

HttpPut putRequest = new HttpPut(urlString]);

StringEntity stringEntity = new StringEntity(xmlString, HTTP.ISO_8859_1);
stringEntity.setContentType("text/xml");
putRequest.setEntity(stringEntity);

putRequest.addHeader("Host", formatUrlForHostHeader(broadsoftUrl));
putRequest.addHeader("Authorization", authorizationString);
putRequest.addHeader("Content-Type", "text/xml");
putRequest.addHeader("Accept", "text/xml");

response = httpClient.execute(putRequest);

我不确定这里还包括什么。我在 4.2 和 4.0.3 上试过。此代码在 AsyncTask 的 doInBackground 中运行。我得到的响应代码是 409 冲突,正文是服务器的特定于应用程序的消息,告诉我正文丢失。我确认 Wireshark 缺少它。

编辑:

一个有趣的提示是,我在桌面上独立运行了相同的代码,并且它有效。那么,Android 版本的 HttpClient 或系统有什么问题吗?我也尝试了几个不同的 API 级别,只是为了检查。

有什么想法吗?

谢谢!

4

2 回答 2

0

好的,所以解决方案是放弃 HttpPut 和所有这些,并使用 HttpURLConnection。以下是我们最终如何做到的:

URL url = new URL(theUrl);
HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
httpCon.setRequestProperty("Host", formatUrlForHostHeader(broadsoftUrl));
httpCon.setRequestProperty("Authorization", authorizationString);
httpCon.setRequestProperty("Content-Type", "text/xml; charset=ISO_8859_1");
httpCon.setRequestProperty("Accept", "text/xml");
httpCon.setDoInput(true);
httpCon.setDoOutput(true);
httpCon.setRequestMethod("PUT");
OutputStreamWriter out = new OutputStreamWriter(httpCon.getOutputStream(), "ISO_8859_1");
out.write(xmlData);
out.close();

if(httpCon.getErrorStream() == null) {
    return "";
} else {
    return "ERROR";
}

我们不需要从 PUT 请求中获取响应,但是您可以通过查看错误流是否存在来检查它是否失败。如果你想得到回应,你会做这样的事情:

StringWriter writer = new StringWriter();
IOUtils.copy(httpCon.getInputStream(), writer, encoding);
String responseString = writer.toString();

当然,您必须在您的应用程序中包含 Apache 的 IOTools。

于 2012-12-14T01:50:32.217 回答
-1

409 Conflict通常是一个编辑冲突错误,通常与 wiki 相关联,但它可能是与请求的任何类型的冲突。

http://en.wikipedia.org/wiki/List_of_HTTP_status_codes

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

您要发布什么类型的数据,主机是否有无法更改的现有数据?

于 2012-12-13T00:02:41.993 回答