Apache HttpClient POST не работает с сущностью - PullRequest
1 голос
/ 23 июня 2011

Я разработал простой веб-сервер на основе сокетов Java, который может читать запросы от клиента. Для клиента я использую библиотеку Apache HttpClient со следующим кодом:

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://localhost:7777/");
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
if (entity != null)
{
  System.out.println(EntityUtils.toString(entity));
}

Когда я выполняю код, сервер получает запрос от клиента:

POST / HTTP/1.1 
Content-Length: 0
Host: localhost:7777 
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

Это нормально. Но теперь я хочу отправить некоторые данные через HTTP-POST, поэтому я расширил свой код:

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://localhost:7777/");
// Extension:
StringEntity testString = new StringEntity("Hello World!", "text/plain", "UTF-8");
httppost.addHeader(testString.getContentType());
httppost.setEntity(testString);
//
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
if (entity != null)
{
  System.out.println(EntityUtils.toString(entity));
}

Если я сейчас выполню код, на сервер ничего не отправится. Если я удалю "httppost.setEntity (testString);" все будет работать как описано в начале. Таким образом, проблема должна быть в «httppost.setEntity (testString);».

Кто-нибудь знает, почему ничего не отправляется, когда я использую "setEntity"? Есть ли другой способ передачи данных? Я уже пробовал этот пример: http://svn.apache.org/repos/asf/httpcomponents/httpclient/branches/4.0.x/httpclient/src/examples/org/apache/http/examples/client/ClientFormLogin.java но безуспешно.

Возможно, проблема в моем веб-сервере. Как должен выглядеть ответ на успешный запрос? Я использую это сообщение:

HTTP/1.1 200 OK
Server: RAKETE Web server/0.1 (Java)
Content-Length: 2
Connection: close
Content-Type: text/html
...