0

私はいくつかの XML をサーバーに PUT しようとしていますが、その要点は、私が何をしても、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 Conflict で、本文はサーバーのアプリケーション固有のメッセージで、本文が欠落していることを示しています。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 は通常編集の競合エラーであり、通常はウィキに関連していますが、リクエストとのあらゆる種類の競合である可能性があります。

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 に答える