Я нахожусь в стадии моего приложения, где мне нужно связаться с внешним сервером и опубликовать на нем немного xml. Я пробовал использовать HttpClient и другие подходы, но ни один из них не работает, и я могу понять, почему. Согласно спецификации c другого сервера, он принимает сообщение xml как документ xml с типом содержимого, указанным в заголовке как text / xml.
Первый подход I попытался сделать следующее:
HttpClient client = HttpClientBuilder.create().setRedirectStrategy(new LaxRedirectStrategy()).build();
HttpPost post = new HttpPost(myURL);
String xml = createXmlWithDocument();
List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
urlParameters.add(new BasicNameValuePair("xml", xml));
UrlEncodedFormEntity UrlEntity = new UrlEncodedFormEntity(urlParameters, "UTF-8");
post.setEntity(UrlEntity);
HttpResponse httpResponse = client.execute(post);
BufferedReader rd = new BufferedReader(new
InputStreamReader(httpResponse.getEntity().getContent()));
StringBuffer responseResult = new StringBuffer();
String line = "";
while ((line = rd.readLine()) != null)
{
responseResult.append(line);
}
LogResponse(responseResult);
Выше работает нормально, как я могу подключиться к серверу (responseCode = 200), но он ничего не получает. Я подправил код, пытаясь добавить несколько заголовков:
post.addHeader("Content-Type", "text/xml");
или путем установки простоты типа содержимого и кодировки:
UrlEntity.setContentType("text/xml");
UrlEntity.setContentEncoding("UTF-8");
перед выполнением публикации, но сервер в этот момент отвечает мне с:
Обнаружено исключение: org. apache .http.NoHttpResponseException: xxx не отвечает
Другой подход был следующим:
HttpEntity entity = new ByteArrayEntity(xml.getBytes("UTF-8"));
post.setEntity(entity);
HttpResponse httpResponse = client.execute(post);
Где сервер отвечает мне с 404 не найден
Другой был с:
StringEntity Stringentity = new StringEntity(xml, ContentType.create(
"text/xml", Consts.UTF_8));
Stringentity.setChunked(true);
post.setEntity(Stringentity);
HttpResponse httpResponse = client.execute(post);
Где я снова получаю 404 в качестве ответа.
Я чувствую, что я очень близок к завершению с первым подходом, но, возможно, я неправильно устанавливаю content-type / headers / et c. Любое предложение, пожалуйста?
В качестве главы я использую httpClient v4.5.3
Спасибо